UiPath AgentHub MCP Servers
Register AgentHub MCP servers via uip agenthub mcp. Author tools on uipath-type servers via uip agenthub mcp-tools.
mcphere means an AgentHub MCP-server resource, not the MCP wire protocol. Slugs likeinbox-mcp/team-helpername AgentHub server registrations, not local repos.uipath-mcp-python(@uipath/mcp) is a separate server-implementation SDK — different task, seeuipath-agents.
When to Use This Skill
- Create / update / delete / refresh / list / get an AgentHub MCP server (any of:
uipath,coded,command,remote,swagger,platform). - Author resource tools on a
uipath-type server; list / get / enable / disable / delete its tools. - Skip: Python MCP server implementation (FastMCP /
@uipath/mcp) →uipath-agents.
Trust the CLI
The CLI is the source of truth for shapes and flags. Use it instead of guessing:
uip agenthub mcp create <type> --print-schema --output json— payload shape for any server type.uip agenthub mcp template <type> --output json— ready-to-edit--fileskeleton.uip agenthub mcp-tools template resource --output json— resource-tool payload skeleton.uip agenthub mcp-tools candidates --category <kind> --output json— discover bindable targets.<kind>∈automation | agent | agentic-process | api-workflow.--output-filter <JMESPath>on every command — extract specific fields without walking JSON by hand (e.g.--output-filter "Data.items[].slug" --output plain).--dry-runon every mutating call — resolve and inspect the body before POST. Note:--dry-runskips some server-side validation, so a clean dry-run is not a guaranteed real POST.
Critical Rules
These are the things the CLI does not advertise in --help.
Slug regex. Backend enforces
^[a-z0-9-]+$, length 3-50. Lowercase, digits, hyphens — no underscores, dots, or uppercase. CLI validates client-side before POST.Folder context is required on every AgentHub call. Pass
--folder-path <name>OR--folder-key <guid>, never both. Exception:mcp list --all-foldersspans every folder you can see (mutually exclusive with the folder flags; folders without AgentHub permission are skipped with aWarningline) — use it to locate a server when its folder is unknown, then pass that folder explicitly on every follow-up call (mcp-toolsverbs have no--all-folders).--folder-pathresolves via Orchestrator SDK. Personal workspace folders (<user>@<tenant>'s workspace) do NOT resolve by name — use--folder-key <guid>. Common names (Shared) can be ambiguous across nested folders; the CLI returns the candidate list with GUIDs — pick one and re-run with--folder-key. Discover GUIDs viauip or folders list --output json.refresh-toolsalways requires--folder-keyspecifically (endpoint is/mcp/{folderKey}/{slug}/refresh-tools).Verify after every mutation. After
create/update/delete/refresh-tools, re-list (mcp list,mcp-tools list --mcp <slug>) ormcp get <slug>and confirm the expected state.refresh-toolsbehavior depends on server type.coded/command— async, returns HTTP 202 + runtime id. Surface the runtime id; never claim refreshed before a follow-upmcp-tools list --mcp <slug>confirms.remote/platform/swagger— sync, returns 200 after a synchronous fetch+upsert.uipath/selfhosted— rejected locally; resource tools are manually authored viamcp-tools create-resource. CLI emits aNextCommandhint to author instead.
mcp deletelooks up by slug, not GUID. Passing a GUID returns 404.
Server Types
uip agenthub mcp create takes six type subcommands. All share --name <display>, --slug <kebab>, --description, --version, --file/--body/--print-schema, --dry-run, --folder-path/--folder-key, --tenant, --login-validity. The differentiating flag picks the integration shape:
| Type | Differentiating flag | When to use | Tool surface |
|---|---|---|---|
uipath |
(none) | AgentHub-hosted server you'll fill with resource tools. | Authored via uip agenthub mcp-tools create-resource. refresh-tools rejected. |
coded |
--process-key <key> (+ --folder-key for the process) |
Wrap an existing coded-agent process (published to Orchestrator) as an MCP server. | Discovered via refresh-tools (async 202). |
command |
--command <cmd> + --arg <arg> (repeatable) + --env <k=v> (repeatable) |
Spawn a local subprocess as an MCP server. | Discovered via refresh-tools (async 202). |
remote |
--uri <url> + --header <k=v> (repeatable) + --use-relay |
Point at an existing HTTP MCP server. Bearer/header values can be Orchestrator asset references; AssetReferenceSubstitutor resolves them at runtime via the caller's token + folder context. Do NOT invent a credential-store syntax. |
Discovered via refresh-tools (sync 200). |
platform |
--service <name> (lowercase service id, e.g. orchestrator — the CLI --help example's capitalized Orchestrator is rejected with HTTP 400) + --tool <name> (repeatable; selects exposed platform tools) |
Bind to a first-party UiPath service. | Discovered via refresh-tools (sync 200). |
swagger |
--spec-url <url> (+ --use-relay) |
Register an OpenAPI/Swagger spec as MCP tools. Same asset substitution as remote. |
Discovered from the spec via refresh-tools (sync 200). |
Headers/auth on remote and swagger are payload fields, not scalar flags. Read the shape from --print-schema (or template <type>), submit via --file <payload.json> or --body '<json>'.
mcp update <slug> dispatches by existing server type — flag shape mirrors create <type>. Verify with mcp get <slug> --output json.
mcp template <type> also accepts process-assistant and selfhosted — these have templates but NO create subcommand (backend enum only; skip).
Resource Tools (uipath-type servers only)
Run uip agenthub mcp-tools create-resource. Flags: --mcp <slug> (parent server), --name, --description, --target-identifier <guid> / --target-name <name> (resolve target via RCS), --folder-key <guid> / --folder-path <name> (MCP server folder context), --target-folder-key <guid> / --target-folder-path <name> (the Orchestrator resource's folder when it differs from the server's; resolves to the tool's targetFolderKey; never both; omit to default to the candidate's folder (--target-name) or the server folder; the explicit flag wins, including over a --file/--body payload field), --category, --input-schema, --output-schema, --metadata, --continue-on-error (default) / --fail-fast, --file/--body, --dry-run.
| Kind | Discovery | Validation | When to use |
|---|---|---|---|
resource |
mcp-tools candidates --category <kind> (kind ∈ automation / agent / agentic-process / api-workflow) |
Resource schema | Bind an Orchestrator resource. Pass --target-identifier <resource-id>. Read metadata shape from mcp-tools template resource --output json. candidates is tenant-wide — each item carries its folder {key, name}; present the folder alongside the name when the user picks. --target-name lookup searches the server folder by default; resource in a different folder → pass --target-folder-path / --target-folder-key (scopes the lookup AND sets the tool's targetFolderKey); with --target-identifier, pass the same flags when the resource's folder differs from the server's. |
Stringify --metadata / --input-schema / --output-schema as scalars (not --file). Build each JSON in a file and pass it as --metadata "$(jq -c . metadata.json)" (likewise input/output schema) — do not assemble multi-KB JSON inline in the command. Pass --output-schema "{}" when the underlying target has no response fields — empty string is rejected with Unexpected end of JSON input.
Other mcp-tools verbs (list --mcp <slug>, get, enable, disable, delete, update) are self-documenting via --help. Use them for the Critical Rule 3 verify step. update also accepts --target-folder-key / --target-folder-path: retargeting via --target-identifier defaults the tool's targetFolderKey to the server folder — pass the explicit flag when the new target lives elsewhere (wins over the default and over a --file/--body payload field).
Troubleshooting (generic)
- HTTP 400 with no detail — re-run with
--dry-runto inspect the resolved body. CLI surfaces ASP.NET ProblemDetails as anErrorsfield listing per-field validation failures. InvalidFolderKey: "--folder-key requires a GUID; use --folder-path for folder names"— switch to--folder-path <name>.No folder named '<personal workspace>' was found. Did you mean: Shared?— personal workspaces are unresolvable by name; pass--folder-key <guid>(Critical Rule 2).ConflictingInput: "Pass either --folder-path or --folder-key, not both."— drop one.- Slug rejected with validation error — backend enforces
^[a-z0-9-]+$, length 3-50 (Critical Rule 1). mcp delete <guid>returns 404 —mcp deletelooks up by slug, not GUID (Critical Rule 5).refresh-toolsreturns 202 with a runtime id —coded/commandrefreshes are async (Critical Rule 4). Surface the runtime id; verify via follow-upmcp-tools list --mcp <slug>.