uipath-orchestrator-mcp
Provides tools for managing UiPath Orchestrator resources including jobs, processes, queues, schedules, robots, machines, and assets across folders.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@uipath-orchestrator-mcp Show me all faulted jobs from the last 24 hours."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
UiPath Orchestrator MCP Server
An MCP (Model Context Protocol) server that exposes UiPath Orchestrator operations as tools, enabling AI assistants like Claude to interact with your UiPath tenant directly.
Features
23 tools spanning the core Orchestrator APIs:
Category | Tools |
Overview |
|
Folders |
|
Jobs |
|
Processes |
|
Queues |
|
Schedules |
|
Robots & Machines |
|
Assets |
|
Related MCP server: Jira & Confluence MCP Server
Prerequisites
Python 3.12+
A UiPath Cloud account with an external application (OAuth client credentials)
The following OAuth scopes:
OR.Jobs OR.Folders OR.Queues OR.Robots OR.Execution OR.Machines OR.Assets
Creating a UiPath External Application
In UiPath Automation Cloud, go to Admin > External Applications
Create a new application with Application Scopes (not user scopes)
Grant the scopes listed above
Copy the Client ID and Client Secret
Installation
Option 1: pip (stdio transport — recommended for local use)
pip install uipath-orchestrator-mcpOption 2: Run from source
git clone https://github.com/adamstuber/uipath-orchestrator-mcp.git
cd uipath-orchestrator-mcp
pip install .Option 3: Docker (SSE transport — for remote/shared use)
docker build -t uipath-orchestrator-mcp .
docker run -p 8000:8000 \
-e UIPATH_CLIENT_ID=your_client_id \
-e UIPATH_CLIENT_SECRET=your_client_secret \
-e UIPATH_TENANT_NAME=your_tenant \
-e UIPATH_ORG_NAME=your_org \
uipath-orchestrator-mcpConfiguration
Copy .env.example to .env and fill in your credentials:
cp .env.example .envVariable | Required | Description |
| Yes | OAuth client ID from your external application |
| Yes | OAuth client secret |
| Yes | Your UiPath tenant name (e.g. |
| Yes | Your UiPath organization name (from the cloud URL) |
| No | Space-separated OAuth scopes (default: all required scopes) |
| No |
|
| No | Host to bind when using an HTTP transport (default: |
| No | Port to bind when using an HTTP transport (default: |
| No | Logging level: |
Usage
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"uipath-orchestrator": {
"command": "uipath-orchestrator-mcp",
"env": {
"UIPATH_CLIENT_ID": "your_client_id",
"UIPATH_CLIENT_SECRET": "your_client_secret",
"UIPATH_TENANT_NAME": "your_tenant",
"UIPATH_ORG_NAME": "your_org"
}
}
}
}Alternatively, if you use a .env file:
{
"mcpServers": {
"uipath-orchestrator": {
"command": "uipath-orchestrator-mcp"
}
}
}Claude Code (CLI)
claude mcp add uipath-orchestrator uipath-orchestrator-mcpHTTP transports (Docker or remote server)
Two HTTP-based transports are supported for remote or containerised deployments:
Transport |
| Endpoint | Notes |
Streamable HTTP |
|
| Recommended — newer MCP spec standard |
SSE |
|
| Legacy, kept for older client compatibility |
Example with streamable HTTP:
docker run -p 8000:8000 \
-e MCP_TRANSPORT=streamable-http \
-e UIPATH_CLIENT_ID=... \
-e UIPATH_CLIENT_SECRET=... \
-e UIPATH_TENANT_NAME=... \
-e UIPATH_ORG_NAME=... \
uipath-orchestrator-mcpThen connect your MCP client to http://your-host:8000/mcp.
Example prompts
Once connected, you can ask Claude things like:
"Show me all faulted jobs from the last 24 hours across all folders."
"Start the InvoiceProcessing process in the Finance folder."
"How many Failed items are in the BillingQueue queue?"
"Retry all failed queue items in the Accounts folder."
"Disable the nightly schedule for the ReportGenerator process."
"What robots are available in the Production folder?"
Development
git clone https://github.com/adamstuber/uipath-orchestrator-mcp.git
cd uipath-orchestrator-mcp
pip install poetry
poetry install
cp .env.example .env # fill in your credentialsRun the server locally (stdio):
poetry run uipath-orchestrator-mcpProject structure
uipath_orchestrator_mcp/
__init__.py # package init
api.py # UiPath Orchestrator API client (authentication, OData, retries)
server.py # MCP tool definitions (FastMCP)
Dockerfile # SSE transport container
pyproject.tomlContributing
Contributions are welcome. Please open an issue before submitting a pull request for significant changes.
Fork the repository
Create a feature branch (
git checkout -b feature/my-feature)Commit your changes
Open a pull request
License
MIT — see LICENSE.
Available Tools
24 toolsadd_queue_itemB
Add a new item to a queue.
Args: folder_name: The display name of the folder. queue_name: The name of the queue. specific_content: Key-value pairs of data to store with the queue item. priority: Item priority — 'Low', 'Normal', or 'High' (default 'Normal'). reference: Optional reference string for tracking purposes.
Inputs: queue_name (required), folder_name (required), specific_content (required), priority, +1 more.
bulk_add_queue_itemsA
Add multiple items to a queue in a single API call.
Args: folder_name: The display name of the folder. queue_name: The name of the queue. items: List of item objects. Each item may contain: - specific_content (dict, required) — the data payload - priority (str, optional) — 'Low', 'Normal', or 'High' - reference (str, optional) — tracking reference commit_type: 'AllOrNothing' (default) — rolls back everything if any item fails; 'ProcessAllIndependently' — commits each item individually.
Inputs: items (required), queue_name (required), folder_name (required), commit_type.
count_queue_itemsA
Return the total number of queue items matching the given criteria — without fetching the items.
Call this before get_queue_items to check volume and decide on batch_size / pagination strategy. Also useful for health checks (e.g. how many New items are waiting?).
Args: folder_name: The display name of the folder. queue_name: Queue name to scope the count. If omitted, counts across all queues in the folder. filter_query: Optional OData filter string (e.g. "Status eq 'Failed'").
Inputs: folder_name (required), queue_name, filter_query. Returns: result
delete_queue_itemA
Delete a queue item by its ID.
Args: queue_item_id: The ID of the queue item to delete. folder_name: The display name of the folder containing the item.
Inputs: folder_name (required), queue_item_id (required).
diagnose_jobA
Return a focused diagnostic report for a job — the first tool to call when asked 'what went wrong?' or 'why did this job fail?'.
Combines job metadata and error logs in one call, avoiding the need to chain
get_job + get_job_logs. Only use get_job_logs afterward if you need more log
history than tail provides or need to paginate through all entries.
Returns:
job: metadata (state, process, start/end time, duration, robot, error fields)
error_logs: all Error and Fatal log entries for the job
combined_log_view: deduplicated, time-sorted merge of error logs + last
tailentries
Args: job_id: The ID of the job to diagnose. folder_name: The display name of the folder containing the job. tail: Number of most-recent log entries to include for context (default 15).
Inputs: job_id (required), folder_name (required), tail.
disable_scheduleB
Disable a process schedule.
Args: schedule_id: The ID of the schedule to disable. folder_name: The display name of the folder containing the schedule.
Inputs: folder_name (required), schedule_id (required).
enable_scheduleB
Enable a process schedule.
Args: schedule_id: The ID of the schedule to enable. folder_name: The display name of the folder containing the schedule.
Inputs: folder_name (required), schedule_id (required).
get_assetA
Get a specific asset by name from a folder.
Args: folder_name: The display name of the folder. asset_name: The name of the asset to retrieve.
Inputs: asset_name (required), folder_name (required). Returns: result
get_jobA
Get the full details for a specific job by ID (raw API response).
Returns all job fields. If you need to understand why a job failed, use diagnose_job instead — it also fetches error logs and returns a structured summary.
Args: job_id: The ID of the job. folder_name: The display name of the folder containing the job.
Inputs: job_id (required), folder_name (required).
get_job_logsA
Retrieve paginated robot execution logs for a specific job.
Use diagnose_job instead when the goal is to understand a failure — it combines job metadata with error logs and recent context in a single focused response. Use get_job_logs when you need full log pagination, specific time ranges, or log levels that diagnose_job doesn't surface.
Log levels (lowest to highest): Trace, Info, Warn, Error, Fatal.
Args: job_id: The ID of the job. folder_name: The display name of the folder containing the job. batch_size: Number of log entries to return (default 100). skip: Number of entries to skip for pagination. min_level: Minimum log level to return — 'Trace', 'Info', 'Warn', 'Error', or 'Fatal'. Ignored if log_levels is provided. log_levels: Exact levels to include, e.g. ['Error', 'Fatal']. Takes priority over min_level. start_time: Return logs at or after this ISO 8601 datetime string. end_time: Return logs at or before this ISO 8601 datetime string.
Inputs: job_id (required), folder_name (required), skip, end_time, +4 more. Returns: result
get_jobs_across_foldersA
Query jobs across multiple folders in a single call — the preferred tool for tenant-wide or multi-folder job queries.
Use list_jobs instead only when you already know the single folder and need advanced OData filtering or job_priority filtering.
Returns a trimmed set of fields per job (same as list_jobs). Results from all folders are merged and optionally sorted by StartTime.
Args: state: Filter by execution state — 'Faulted', 'Successful', 'Pending', 'Running', 'Stopped', 'Stopping'. folder_names: Folders to check. If omitted, checks all non-workspace folders. hours_back: Return jobs started within the last N hours. Takes priority over days_back. days_back: Return jobs started within the last N days. release_name: Filter jobs by release name. source: Filter by how the job was triggered — 'Manual', 'Schedule', 'Agent', 'Queue'. most_recent_first: If True, return most recently started jobs first per folder, then sort combined results. Use with batch_size to efficiently find the last N jobs across folders. batch_size: Max jobs to return per folder (default 50).
Inputs: state, source, days_back, batch_size, +4 more. Returns: result
get_orchestrator_summaryA
Return all non-workspace folders with their deployed processes and queue names.
This is the primary discovery tool. Call it once at the start of any session or whenever the folder name, process name, or queue name is unknown. The names returned here are the exact values expected by folder_name, process_name, and queue_name parameters in all other tools.
Returns a list of objects: {folder, processes: [...], queues: [...]}. Personal workspace folders are excluded automatically.
Inputs: no named parameters.
get_queue_itemsA
Retrieve a batch of queue items from a specific queue.
Queue item statuses: New, InProgress, Successful, Failed, Abandoned, Retried, Deleted.
Before calling this on a large queue, use count_queue_items to check volume. Use most_recent_first=True with a small batch_size to efficiently get the latest items.
OData filter examples:
"Status eq 'Failed'"
"Status eq 'New' and Priority eq 'High'"
"Reference eq 'ORDER-123'"
Args: folder_name: The display name of the folder. queue_name: The name of the queue. batch_size: Number of items to return (default 100). skip: Number of items to skip for pagination (default 0). filter_query: Optional OData filter string. most_recent_first: If True, return newest items first.
Inputs: queue_name (required), folder_name (required), skip, batch_size, +2 more. Returns: result
list_assetsA
List all assets in a folder.
Args: folder_name: The display name of the folder.
Inputs: folder_name (required). Returns: result
list_foldersA
List all folders in UiPath Orchestrator (raw API response).
Prefer get_orchestrator_summary over this tool — it also returns processes and queues per folder and filters out personal workspaces. Use list_folders only when you need the raw folder metadata (IDs, types, parent hierarchy).
Inputs: no named parameters. Returns: result
list_jobsA
List and filter jobs within a single folder.
Use this when the user asks about jobs in a specific, known folder. Use get_jobs_across_folders instead when querying multiple folders or the entire tenant.
Returns a trimmed set of fields per job: Id, ReleaseName, State, StartTime, EndTime, Info, JobError, HostMachineName, Source, and _folder.
Args: folder_name: The display name of the folder. batch_size: Number of jobs to return (default 50). skip: Number of jobs to skip for pagination (default 0). state: Filter by job state — 'Faulted', 'Successful', 'Pending', 'Running', 'Stopped', 'Stopping'. job_priority: Filter by priority — 'Low', 'Normal', or 'High'. start_time: Filter jobs that started at or after this ISO 8601 datetime string. end_time: Filter jobs that ended at or before this ISO 8601 datetime string. release_name: Filter jobs by release (process) name. source: Filter by how the job was triggered — 'Manual', 'Schedule', 'Agent', 'Queue'. most_recent_first: If True, return most recently started jobs first.
Inputs: folder_name (required), skip, state, source, +6 more. Returns: result
list_machinesA
List machines, optionally scoped to a specific folder.
Args: folder_name: The display name of the folder (optional). If omitted, returns all machines.
Inputs: folder_name. Returns: result
list_queue_definitionsA
List all queue definitions (metadata) in a folder.
Returns queue names, IDs, and configuration — but not the queue items themselves. To retrieve actual work items, use get_queue_items. To count items matching a filter before fetching, use count_queue_items.
Args: folder_name: The display name of the folder.
Inputs: folder_name (required). Returns: result
list_releasesA
List all releases (deployed automations) in a folder with full metadata.
In UiPath, a "release" is a specific version of a process package deployed to a folder. get_orchestrator_summary returns just the process names; use list_releases when you need release keys (GUIDs), package versions, entry points, or other deployment metadata.
Args: folder_name: The display name of the folder.
Inputs: folder_name (required). Returns: result
list_robotsA
List robots, optionally scoped to a specific folder.
Args: folder_name: The display name of the folder (optional). If omitted, returns all robots.
Inputs: folder_name. Returns: result
list_schedulesA
List all process schedules (time-based triggers) in a folder.
Returns schedule metadata including cron expression, enabled/disabled state, and the associated release name. Use enable_schedule / disable_schedule to toggle them.
Args: folder_name: The display name of the folder.
Inputs: folder_name (required). Returns: result
retry_queue_itemA
Retry a Failed or Abandoned queue item, resetting it to New so robots will pick it up again.
Only applicable to items with status Failed or Abandoned — retrying items in other states will return an API error. The row_version field is returned with each queue item from get_queue_items and is required for optimistic concurrency control.
Args: queue_item_id: The ID of the queue item to retry. row_version: The RowVersion value from the queue item (prevents stale retries). folder_name: The display name of the folder containing the item.
Inputs: folder_name (required), row_version (required), queue_item_id (required).
start_jobA
Start a new execution of a process (release) in a folder.
Provide process_name (as returned by get_orchestrator_summary) and folder_name — the release key is looked up automatically. Only provide release_key if you already have the exact GUID and want to skip that lookup.
Strategy options:
'All' (default): run on all connected robots in the folder.
'Specific': run only on the robots listed in robot_ids.
'JobsCount': start exactly jobs_count parallel job instances.
Args: folder_name: The display name of the folder containing the process. process_name: The process name as returned by get_orchestrator_summary. release_key: GUID of the release. Omit to auto-resolve from process_name. strategy: Robot allocation strategy — 'All', 'Specific', or 'JobsCount'. robot_ids: List of robot IDs to target (required when strategy is 'Specific'). jobs_count: Number of job instances to start (required when strategy is 'JobsCount'). input_arguments: Dictionary of input argument name→value pairs to pass to the process.
Inputs: folder_name (required), strategy, robot_ids, jobs_count, +3 more. Returns: result
stop_jobA
Stop a running job.
Args: job_id: The ID of the job to stop. folder_name: The display name of the folder containing the job. strategy: Stop strategy — 'SoftStop' (graceful, waits for current transaction) or 'Kill' (immediate).
Inputs: job_id (required), folder_name (required), strategy.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 24 tools
Most tools have clearly distinct purposes, and overlapping pairs like list_jobs vs get_jobs_across_folders or get_job vs diagnose_job are explicitly differentiated in their descriptions. The guidance to prefer get_orchestrator_summary over list_folders reduces ambiguity. However, the sheer number of tools and some close functional similarities (e.g., count_queue_items vs get_queue_items) create minor potential for misselection.
All tool names follow a consistent verb_noun pattern with lowercase and underscores (list_folders, get_queue_items, start_job, diagnose_job). Even multi-word names like get_jobs_across_folders and bulk_add_queue_items maintain the pattern. There are no stylistic deviations or mixed conventions.
With 24 tools, this sits at the high end of the 'borderline' range (16-25). The coverage spans multiple resource types (queues, jobs, schedules, robots, assets), so the count is justified for a broad Orchestrator domain, but it feels heavy compared to more focused servers. A few tools could be consolidated (e.g., diagnose_job could wrap get_job and get_job_logs internally without exposing them).
The set covers key operations for queues (add, get, delete, retry, count) and jobs (list, get, start, stop, diagnose, logs), which are the core workflows. However, there are notable gaps: no create/update/delete for schedules, assets, robots, or machines, and no folder management beyond listing. This means users can monitor and operate existing resources but cannot manage the full lifecycle of those resources.
Maintenance
Related MCP Connectors
Connect, monitor, and control AI agents — tasks, approvals, schedules, and governance.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Give AI agents 30,000+ safe, token-optimized actions across Workday, SAP, Oracle + hundreds more.
- DNS-DATA RemoteDeprecatedcom.dns-data
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables interaction with UiPath Orchestrator Cloud API to manage processes, robots, jobs, queues, and assets through natural language.104MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with Jira and Confluence via natural language, supporting 37 Jira tools and 16 Confluence tools.5375 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants and automation tools to manage Microsoft 365, Entra ID, and Intune resources through 32 tools for user/device/file management and infrastructure monitoring.8MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to securely interact with UiPath Orchestrator for managing queues, jobs, robots, and automation analytics through natural language.29MIT