@uipath/skills 1.199.0-preview.106 → 1.199.0-preview.171
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/uip-catalog-snapshot.json +0 -2
- package/package.json +1 -1
- package/skills/uipath-mcp-servers/SKILL.md +9 -16
- package/skills/uipath-planner/SKILL.md +1 -1
- package/skills/uipath-planner/references/multi-skill-patterns-guide.md +1 -3
- package/version-manifest.json +1 -1
- package/skills/uipath-mcp-servers/references/is-activity-workflow.md +0 -168
|
@@ -233,8 +233,6 @@
|
|
|
233
233
|
"agenthub mcp update",
|
|
234
234
|
"agenthub mcp-tools",
|
|
235
235
|
"agenthub mcp-tools candidates",
|
|
236
|
-
"agenthub mcp-tools create-is-activity",
|
|
237
|
-
"agenthub mcp-tools create-raw",
|
|
238
236
|
"agenthub mcp-tools create-resource",
|
|
239
237
|
"agenthub mcp-tools delete",
|
|
240
238
|
"agenthub mcp-tools disable",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/skills",
|
|
3
|
-
"version": "1.199.0-preview.
|
|
3
|
+
"version": "1.199.0-preview.171",
|
|
4
4
|
"description": "UiPath agent skills for Claude Code, Codex, Cursor, Copilot, Gemini and OpenCode — RPA, UI automation, UI testing, coded agents/apps/workflows, and troubleshooting. Distributed as the UiPath Claude Code plugin.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "UiPath"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-mcp-servers
|
|
3
|
-
description: "UiPath AgentHub MCP server registration + tool authoring via `uip agenthub mcp` (six server types: uipath / coded / command / remote / platform / swagger) and `uip agenthub mcp-tools`
|
|
3
|
+
description: "UiPath AgentHub MCP server registration + resource-tool authoring via `uip agenthub mcp` (six server types: uipath / coded / command / remote / platform / swagger) and `uip agenthub mcp-tools` on `uipath`-type servers. For Python MCP servers / coded-agent integration→uipath-agents."
|
|
4
4
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -13,9 +13,8 @@ Register AgentHub MCP servers via `uip agenthub mcp`. Author tools on `uipath`-t
|
|
|
13
13
|
## When to Use This Skill
|
|
14
14
|
|
|
15
15
|
- Create / update / delete / refresh / list / get an AgentHub MCP server (any of: `uipath`, `coded`, `command`, `remote`, `swagger`, `platform`).
|
|
16
|
-
- Author
|
|
17
|
-
-
|
|
18
|
-
- Skip: Python MCP server implementation (FastMCP / `@uipath/mcp`) → `uipath-agents`. Raw IS CLI outside MCP tooling → `uipath-platform`.
|
|
16
|
+
- Author resource tools on a `uipath`-type server; list / get / enable / disable / delete its tools.
|
|
17
|
+
- Skip: Python MCP server implementation (FastMCP / `@uipath/mcp`) → `uipath-agents`.
|
|
19
18
|
|
|
20
19
|
## Trust the CLI
|
|
21
20
|
|
|
@@ -23,8 +22,8 @@ The CLI is the source of truth for shapes and flags. Use it instead of guessing:
|
|
|
23
22
|
|
|
24
23
|
- `uip agenthub mcp create <type> --print-schema --output json` — payload shape for any server type.
|
|
25
24
|
- `uip agenthub mcp template <type> --output json` — ready-to-edit `--file` skeleton.
|
|
26
|
-
- `uip agenthub mcp-tools template
|
|
27
|
-
- `uip agenthub mcp-tools candidates --category <kind> --output json` — discover bindable targets. `<kind>` ∈ `automation | agent | agentic-process | api-workflow
|
|
25
|
+
- `uip agenthub mcp-tools template resource --output json` — resource-tool payload skeleton.
|
|
26
|
+
- `uip agenthub mcp-tools candidates --category <kind> --output json` — discover bindable targets. `<kind>` ∈ `automation | agent | agentic-process | api-workflow`.
|
|
28
27
|
- `--output-filter <JMESPath>` on every command — extract specific fields without walking JSON by hand (e.g. `--output-filter "Data.items[].slug" --output plain`).
|
|
29
28
|
- `--dry-run` on every mutating call — resolve and inspect the body before POST. Note: `--dry-run` skips some server-side validation, so a clean dry-run is not a guaranteed real POST.
|
|
30
29
|
|
|
@@ -41,19 +40,17 @@ These are the things the CLI does not advertise in `--help`.
|
|
|
41
40
|
4. **`refresh-tools` behavior depends on server type.**
|
|
42
41
|
- `coded` / `command` — async, returns HTTP 202 + runtime id. Surface the runtime id; never claim refreshed before a follow-up `mcp-tools list --mcp <slug>` confirms.
|
|
43
42
|
- `remote` / `platform` / `swagger` — sync, returns 200 after a synchronous fetch+upsert.
|
|
44
|
-
- `uipath` / `selfhosted` — rejected locally; tools are manually authored via `mcp-tools create
|
|
43
|
+
- `uipath` / `selfhosted` — rejected locally; resource tools are manually authored via `mcp-tools create-resource`. CLI emits a `NextCommand` hint to author instead.
|
|
45
44
|
|
|
46
45
|
5. **`mcp delete` looks up by slug, not GUID.** Passing a GUID returns 404.
|
|
47
46
|
|
|
48
|
-
6. **For any `is-activity` tool, read [references/is-activity-workflow.md](references/is-activity-workflow.md) end-to-end before any CLI call.** It owns the cascade-asking gate, the action-triggered platform-IS reads, the `ActivityMetadata` schema, and the `inputSchema` / `designTimeLookups` rules. IS metadata authored from memory passes `--dry-run` but fails at runtime — do not skip the reference. `Reason: IsActivityNotAvailable` from ANY is-activity verb → STOP immediately: no further is-activity calls (no create attempt "to confirm" — the error covers every verb), no `--force` without explicit user approval; the gate follows the payload — an IS-activity payload (`type: 1` + `processType: Api`) via `create-raw` / `create-resource` / `update --file`/`--body` is gated identically; offer `resource` / `raw` instead (genuinely different kinds, not the same payload re-verbed — reference §Availability).
|
|
49
|
-
|
|
50
47
|
## Server Types
|
|
51
48
|
|
|
52
49
|
`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:
|
|
53
50
|
|
|
54
51
|
| Type | Differentiating flag | When to use | Tool surface |
|
|
55
52
|
|------|---------------------|-------------|--------------|
|
|
56
|
-
| `uipath` | _(none)_ | AgentHub-hosted server you'll fill with
|
|
53
|
+
| `uipath` | _(none)_ | AgentHub-hosted server you'll fill with resource tools. | Authored via `uip agenthub mcp-tools create-resource`. `refresh-tools` rejected. |
|
|
57
54
|
| `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). |
|
|
58
55
|
| `command` | `--command <cmd>` + `--arg <arg>` (repeatable) + `--env <k=v>` (repeatable) | Spawn a local subprocess as an MCP server. | Discovered via `refresh-tools` (async 202). |
|
|
59
56
|
| `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). |
|
|
@@ -66,15 +63,13 @@ Headers/auth on `remote` and `swagger` are payload fields, not scalar flags. Rea
|
|
|
66
63
|
|
|
67
64
|
`mcp template <type>` also accepts `process-assistant` and `selfhosted` — these have templates but NO `create` subcommand (backend enum only; skip).
|
|
68
65
|
|
|
69
|
-
##
|
|
66
|
+
## Resource Tools (`uipath`-type servers only)
|
|
70
67
|
|
|
71
|
-
`uip agenthub mcp-tools create-
|
|
68
|
+
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`.
|
|
72
69
|
|
|
73
70
|
| Kind | Discovery | Validation | When to use |
|
|
74
71
|
|------|-----------|------------|-------------|
|
|
75
|
-
| `is-activity` | `mcp-tools candidates --category is-activity` + `is resources describe` | Connector schema | Wrap an Integration Service connector activity as an MCP tool. **Load [references/is-activity-workflow.md](references/is-activity-workflow.md) end-to-end** — extra Critical Rules, Pre-flight, `ActivityMetadata` schema, and IS-specific troubleshooting apply. Rolling out: unavailable environments fail with `Reason: IsActivityNotAvailable` — follow the reference's §Availability (stop; offer `resource` / `raw`). |
|
|
76
72
|
| `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. |
|
|
77
|
-
| `raw` | None | None | Free-form JSON tool — caller owns correctness end-to-end. No discovery, no schema validation, no reference-value labeling. Read the skeleton from `mcp-tools template raw --output json`. |
|
|
78
73
|
|
|
79
74
|
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`.
|
|
80
75
|
|
|
@@ -89,5 +84,3 @@ Other `mcp-tools` verbs (`list --mcp <slug>`, `get`, `enable`, `disable`, `delet
|
|
|
89
84
|
- **Slug rejected with validation error** — backend enforces `^[a-z0-9-]+$`, length 3-50 (Critical Rule 1).
|
|
90
85
|
- **`mcp delete <guid>` returns 404** — `mcp delete` looks up by slug, not GUID (Critical Rule 5).
|
|
91
86
|
- **`refresh-tools` returns 202 with a runtime id** — `coded` / `command` refreshes are async (Critical Rule 4). Surface the runtime id; verify via follow-up `mcp-tools list --mcp <slug>`.
|
|
92
|
-
|
|
93
|
-
Tool-kind-specific troubleshooting lives with the workflow that owns it — IS-activity troubleshooting is in [references/is-activity-workflow.md](references/is-activity-workflow.md).
|
|
@@ -138,7 +138,7 @@ High-level view of what each specialist owns. **Do not describe internal flows o
|
|
|
138
138
|
| `uipath-platform` | Auth (`uip login`), Orchestrator (folders, processes, jobs, machines, users, roles), resources (assets, queues, storage buckets + bucket files, libraries, webhooks, triggers), Integration Service (connectors, connections, activities, IS triggers), Data Fabric entities/records/files/choice-sets (`uip df`), traces, licensing | Yes (auth hub) | **Yes** — for non-solution single packages and Orchestrator-side post-deploy ops |
|
|
139
139
|
| `uipath-ixp` | Document Understanding / IXP — extraction from semi-structured documents (invoices, forms): taxonomy, model, classify / extract / validate. Standalone project, or the extraction step a primary consumes | Yes (`uip login`) | **Partial** — model publish/tag via `uip ixp`; consumed by the host project |
|
|
140
140
|
| `uipath-connector-builder` | Integration Service **custom connector** authoring (REST+JSON) on disk via `uip is connectors builder` — build a connector when the catalog has none for a required integration (needed by API Workflows / Maestro / Agents; RPA can call the API directly instead) | Yes (`uip login`) | **Yes** — import/publish is deployment (`uip is connectors`) |
|
|
141
|
-
| `uipath-mcp-servers` | UiPath AgentHub MCP server registration (6 types: `uipath`, `coded`, `command`, `remote`, `swagger`, `platform`) and tool authoring on `uipath`-type servers (
|
|
141
|
+
| `uipath-mcp-servers` | UiPath AgentHub MCP server registration (6 types: `uipath`, `coded`, `command`, `remote`, `swagger`, `platform`) and resource-tool authoring on `uipath`-type servers (`automation`, `agent`, `agentic-process`, `api-workflow`). Wraps Orchestrator resources, external HTTP MCP endpoints, OpenAPI specs, published coded agents, local subprocess commands, or first-party UiPath services as MCP tools. NOT for FastMCP / Python `mcp` SDK work. | Yes (`uip login`) | **Yes** — registration is deployment (posts directly to AgentHub) |
|
|
142
142
|
| `uipath-solution` | `uip solution` lifecycle (init, pack, publish, deploy, activate) for `.uipx` solutions. Runs as the final skill in PDD-driven flows (deploy of `.uipx` solutions). | Yes (`uip login`) | **Yes** — for multi-project Solution (`.uipx`) deploys |
|
|
143
143
|
|
|
144
144
|
## Reference Navigation
|
|
@@ -92,7 +92,7 @@ Orchestrator deploy of the wrapping `.uipx` solution requires `uipath-solution`.
|
|
|
92
92
|
|
|
93
93
|
## Pattern 6 — Build an AgentHub MCP server
|
|
94
94
|
|
|
95
|
-
**When it applies:** the request is to register an AgentHub MCP server that wraps a coded agent or uses Orchestrator-asset-backed auth that does not exist yet. Pure `uipath-mcp-servers` work — `uipath`
|
|
95
|
+
**When it applies:** the request is to register an AgentHub MCP server that wraps a coded agent or uses Orchestrator-asset-backed auth that does not exist yet. Pure `uipath-mcp-servers` work — `uipath` servers with resource tools, `command` / `platform` servers, or `remote` / `swagger` servers with auth assets already in place — is single-skill; go straight to `uipath-mcp-servers`.
|
|
96
96
|
|
|
97
97
|
Wrapping a not-yet-built coded agent (server type `coded`):
|
|
98
98
|
|
|
@@ -108,8 +108,6 @@ Orchestrator assets needed for `remote` / `swagger` Bearer / header substitution
|
|
|
108
108
|
2. uipath-mcp-servers → register the server with asset-substituted headers
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
Missing IS connections are **not** a `uipath-platform` prereq — IS connections are created interactively in the Integration Service UI via OAuth, not by the CLI.
|
|
112
|
-
|
|
113
111
|
## Pattern routing for PDD-driven lane
|
|
114
112
|
|
|
115
113
|
When deriving tasks from an SDD, the planner picks a pattern based on the SDD's project list:
|
package/version-manifest.json
CHANGED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
# IS-Activity Tool Authoring
|
|
2
|
-
|
|
3
|
-
Wrap an Integration Service connector activity as an MCP tool via `uip agenthub mcp-tools create-is-activity`. Discovery verb is `uip is resources run` / `describe` (pre-rename `execute` → use `run`).
|
|
4
|
-
|
|
5
|
-
**Division of labor.** The metadata-*discovery* workflow — `describe`, reference resolution, cascade (`-f`), scope filtering, static-value labeling — lives in the platform IS references below; this file does not restate it. This file owns the MCP-tool layer: turning discovered metadata into the `create-is-activity` payload (`ActivityMetadata`, `inputSchema`, `outputSchema`). **Do not author IS metadata from memory** — a `designTimeLookups` / `-f` / `reference` shape that "looks right from a rule" still gets the wrong shape per connector and fails at runtime after passing `--dry-run`. Read the platform section at the action-trigger below even when confident.
|
|
6
|
-
|
|
7
|
-
## Availability (rollout gate)
|
|
8
|
-
|
|
9
|
-
IS-activity MCP tools are rolling out: live on alpha/staging; NOT yet on `cloud.uipath.com` (prod — server-side feature flag per tenant). CLI enforces this: `candidates --category is-activity` and `create-is-activity` fail fast with `Reason: IsActivityNotAvailable` on unavailable hosts. The gate follows the payload, not just the verb: `create-resource` / `create-raw` / `update` carrying an IS-activity payload (`type: 1` + `processType: "Api"`, via `--file`/`--body`) are gated identically — there is no smuggling route. On that error: STOP — do not retry, do not run `create-is-activity` to "confirm" the gate (the error already covers every is-activity verb), do not re-author the same payload through `create-raw` / `update`. Tell the user the feature is not yet available on this environment; offer `resource` / `raw` tools instead — meaning a genuinely different tool kind (Orchestrator resource binding / non-IS raw payload), NOT the IS-activity payload under another verb. Re-run with `--force` (accepted on every gated verb) ONLY when the user confirms the tenant is enrolled in the rollout. CLI versions without the gate: the create succeeds but yields a dead tool (hidden in UI, not invocable) — apply the same rule manually before authoring: base URL is `cloud.uipath.com` → stop and ask.
|
|
10
|
-
|
|
11
|
-
## Platform IS references — read by action
|
|
12
|
-
|
|
13
|
-
In `../../uipath-platform/references/integration-service/`. Each is small. Do NOT read all upfront — before performing each action, read the named section first. The blind spots are unknown-unknowns, so the trigger is the action, not your sense of certainty.
|
|
14
|
-
|
|
15
|
-
| Before this action | First read |
|
|
16
|
-
|---|---|
|
|
17
|
-
| `uip is connections list <key>` for the first time | `connections.md` §`Folder Scoping` (pass `--all-folders`) |
|
|
18
|
-
| `is resources describe ... -f <parent>=<value>` (any cascade re-run) — **mandatory, incl. curated activities you "know" (Jira `curated_create_issue`)** | `resources.md` §`Parent-Field-Driven Custom Fields` (`-f` shape, `--operation` requirement, `--action` rule, merge semantics) |
|
|
19
|
-
| A `staticValues.<bucket>.<field>` whose describe field has a `.reference` block | `reference-resolution.md` §`Static Reference-Value Labeling` (`designTimeLookups` format + cascade-scope edge cases) |
|
|
20
|
-
| An `inputSchema.properties.<field>` whose `.reference.path` contains `{otherField}` | `reference-resolution.md` §`Field Dependency Chains` (resolve parent first) |
|
|
21
|
-
| An `inputSchema.properties.<field>` whose `.reference.filterPattern` contains `{filter}` | `reference-resolution.md` §`Search References` |
|
|
22
|
-
| Resolving a reference where `run list` returns `scope: null` AND `scope.type: "PROJECT"` rows | `reference-resolution.md` §`Scope Filtering` |
|
|
23
|
-
| Diagnosing a `describe` server-side failure | `resources.md` §`Describe Failures` |
|
|
24
|
-
| Final gate before `create-is-activity --dry-run` | `reference-resolution.md` §`Validate Required Fields Before Executing` |
|
|
25
|
-
|
|
26
|
-
## Critical rules (extend SKILL.md)
|
|
27
|
-
|
|
28
|
-
1. **Discover before authoring.** `candidates --category is-activity` resolves connector + activity; `is resources describe` pulls field metadata. Compose `metadata` / `inputSchema` / `outputSchema` from the describe response, never from memory — every connector + operation has its own shape.
|
|
29
|
-
2. **Enumerate connections across ALL folders, then pick.** Discovery: `uip is connections list <connector-key> --all-folders --output json` — one call spanning every folder you can see. Mandatory on EVERY connections listing — including verification when the user already named a connection or folder. Never call the bare form: without `--all-folders` the call silently scopes to the current context and may return empty; `--all-folders` is mutually exclusive with `--folder` / `--folder-key`. Capture each row's folder — the user picks connection + folder together (Pre-flight 1). Pass `--target-identifier <connection-guid>`; `targetFolderKey` then defaults to the MCP server folder. Connection in a different folder → set it explicitly with `--target-folder-path <name>` / `--target-folder-key <guid>` (mirrors `--folder-path` / `--folder-key`, never both); the cross-folder guard allows an explicit target folder. Neither target-folder flag passed and `Reason: CrossFolderConnection` → pick from `Data.candidates`. (`connections.md` §`Folder Scoping` / §`Selecting a Connection`)
|
|
30
|
-
3. **Cascade api-type ObjectActions.** Before the first `-f` cascade re-run you **MUST read `resources.md` §`Parent-Field-Driven Custom Fields`** — the pointers in this rule are a map, not a substitute. Knowing a connector's cascade fields from memory (e.g. Jira `curated_create_issue` = `project.key` + `issuetype.id`) does NOT exempt you: the `-f` shape, `--operation` requirement, `--action` rule, and merge semantics vary per connector and change over time; a shape that "looks right" passes `--dry-run` and fails at runtime. Then: `describe <key> <objectName> --connection-id <id> --operation <op>`; if `requestFields` is short for the operation, re-run with `-f <parent>=<value>` (repeatable). Omit `--action` for Jira `curated_create_issue` Create (passing it → `No api-type ObjectAction matched`); pass `--action` only when describe reports multiple matches. Cascade examples: Jira `curated_create_issue`, Salesforce `query_records`, Dataservice V3.
|
|
31
|
-
4. **Baked static reference values need `designTimeLookups`.** Every `staticValues.<bucket>.<field>` (any bucket — `field` / `query` / `header` / `path`) whose describe field has a `.reference` block MUST emit `designTimeMetadata.designTimeLookups[<dotted-field>] = "<displayName> - <value>"`. Applies to `requestFields[]` and `parameters[]`; NOT to runtime / enum fields — labeling renders only for baked values. (`reference-resolution.md` §`Static Reference-Value Labeling`)
|
|
32
|
-
5. **Stringify `metadata` / `inputSchema` / `outputSchema` as scalars** — SDK types them `string | null`. Build each in a file and pass `--metadata "$(jq -c . metadata.json)"`; do not assemble multi-KB JSON inline, and do not mix `--file` with scalar options (`ConflictingInput`). `--output-schema "{}"` when the activity has no `responseFields` (empty string → `Unexpected end of JSON input`).
|
|
33
|
-
6. **Ask — don't guess — when a value drives discovery.** Cascade `-f` parents, a search-reference `{filter}`, a dependency-chain parent, or a required reference with no user hint: STOP and ask, even in autonomous mode. **No autonomous fallback exists.** If the user defers ("Other" / "you decide" / silence), re-ask in plain text — do NOT fall back to free runtime, a guessed default, or silently skipping the tool. Bounded set (2–4 candidates) → `AskUserQuestion` (do not add "Other"; it is auto-appended; <2 options errors). Unbounded set (dozens+) → plain text showing the top 5–10 candidates by a real attribute plus the exact format you need (`"<project key> + <issue type>"`). Never filter an unbounded `run list` with a guessed `JMESPath` name — a miss returns `[]` with no signal.
|
|
34
|
-
|
|
35
|
-
## Reference fields — the 3-way choice
|
|
36
|
-
|
|
37
|
-
For every `requestFields[name].reference` or `parameters[name].reference` (`reference-resolution.md` §`Reference Fields`), run `uip is resources run list <connector> <reference.objectName> --connection-id <id> --output json`, then pick per field:
|
|
38
|
-
|
|
39
|
-
- **(a) Bake** — `staticValues.<bucket>.<field> = <value>` + a `designTimeLookups` entry (Rule 4). When one value applies to every call (user named it).
|
|
40
|
-
- **(b) Constrained runtime** — `inputSchema.properties.<field> = {type: string, enum: [<discovered values>]}`. When the set is bounded (≤ 20–50), stable, known now. No lookup needed.
|
|
41
|
-
- **(c) Free runtime** (default) — `inputSchema.properties.<field> = {type: string}`, no enum. When the set is large / volatile (IDs, free text, search inputs). The `description` is the prompt the consuming LLM reads: noun phrase + format (e.g. `"IANA timezone like 'UTC'"`) + omission behavior + constraints.
|
|
42
|
-
|
|
43
|
-
Cascade roots and search references with no user-supplied filter = **hard ask** (Rule 6) — no "pick first" / "most-recent" default. Non-cascade required references default to (c) in autonomous mode; use (b) only when the set is genuinely small and stable.
|
|
44
|
-
|
|
45
|
-
## Pre-flight (walk before drafting `--metadata`)
|
|
46
|
-
|
|
47
|
-
0. **Scope.** Restate server slug, folder, exact tool list (one bullet per `<connector> · <activity> · <op>`), baked statics. Folder: if unnamed, `uip or folders list --output json` → `Shared` (org-default) or `<email>'s workspace` (personal needs `--folder-key <guid>`). Run `mcp-tools list --mcp <slug> --folder-path <name>` first — same name + connector + objectName exists → ask update vs add-new.
|
|
48
|
-
1. **Connection** — Rule 2: enumerate with `--all-folders` FIRST. Exploring every folder is mandatory before presenting any choice — never ask off a single-folder view. Then ask which connection + folder to use: present name / owner / folder per row, never UUIDs (`connections.md` §`Selecting a Connection`); 2–4 rows → `AskUserQuestion`, more → plain-text top list. Confirm even on a single match. A connection in ANY folder is usable (Rule 2's target-folder flags). Zero across all folders → surface a create-connection hint and STOP.
|
|
49
|
-
2. **Activity disambiguation.** `candidates --category is-activity --connector <key>` returns ≥2 overlapping entries (`send_message_to_channel` vs `_to_user`) → ASK. GET tie-break: `Get…` / `Find…` without an id → `List`; `Get … by …` or path `{id}`/`{key}` → `Retrieve`; unsure → describe without `--operation`, present `Data.availableOperations[]`.
|
|
50
|
-
3. **Reference fields** — the 3-way choice above, per field.
|
|
51
|
-
4. **Required scalar with no enum / reference / description** → STOP, ask (e.g. Slack `UsersByEmail.By`). Do not bake a guess.
|
|
52
|
-
|
|
53
|
-
Multi-tool builds ("server with tools for X and Y"): re-walk Pre-flight + the command steps per tool — by tool 3 you drift toward tool 1's model.
|
|
54
|
-
|
|
55
|
-
## `ActivityMetadata` (the object to stringify into `--metadata`)
|
|
56
|
-
|
|
57
|
-
```jsonc
|
|
58
|
-
{
|
|
59
|
-
"connector": { "key": "<connector-key>" }, // from candidates
|
|
60
|
-
"object": {
|
|
61
|
-
"path": "<availableOperations[chosen].path — e.g. /issue/{issueKey}/comment/{commentId}>",
|
|
62
|
-
"objectName": "<the describe argument, e.g. issue_comment>",
|
|
63
|
-
"method": "<GET|POST|PATCH|PUT|DELETE — from availableOperations[chosen].method>",
|
|
64
|
-
"contentType": "application/json"
|
|
65
|
-
},
|
|
66
|
-
"mapping": {
|
|
67
|
-
"path": ["issueKey", "commentId"], // property names filling {placeholder} tokens in object.path
|
|
68
|
-
"query": ["maxResults", "startAt"], // parameters[i] where .type === "query"
|
|
69
|
-
"header": [], // parameters[i] where .type === "header"
|
|
70
|
-
"field": [] // body fields (typically requestFields[])
|
|
71
|
-
},
|
|
72
|
-
"staticValues": {
|
|
73
|
-
"query": { /* field-name: literal value the LLM cannot override */ },
|
|
74
|
-
"header": { },
|
|
75
|
-
"path": { },
|
|
76
|
-
"field": { /* body fields the LLM cannot override */ }
|
|
77
|
-
},
|
|
78
|
-
"designTimeMetadata": {
|
|
79
|
-
"designTimeLookups": {
|
|
80
|
-
// one entry per staticValues.* field whose describe field has .reference
|
|
81
|
-
// value format: "<displayName> - <baked-value>" e.g. "fields.project.key": "Orchestrator - OR"
|
|
82
|
-
// see Critical Rule 4
|
|
83
|
-
},
|
|
84
|
-
"manageProperties": []
|
|
85
|
-
},
|
|
86
|
-
"metadataVersion": 1
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
`staticValues` holds only values the LLM cannot override (`processType`, baked enum choices, baked reference IDs); runtime values belong in `inputSchema.properties`. Emit flat dotted keys (`"fields.project.key": "OR"`); the FE may persist them nested on save — both round-trip through `ParameterMappingService`'s four-bucket iteration (`Query` / `Path` / `Header` / `Field`).
|
|
91
|
-
|
|
92
|
-
`inputSchema.properties` = `requestFields ∪ parameters` not covered by `staticValues`. Per entry: name = `parameters[i].name` / `requestFields[j].name`; `title` = `displayName ?? name`; `description`; `type` from `dataType` / field shape; add to `required[]` when `.required === true`; honor `enum` / `.reference` (the 3-way choice). Curated activities often have empty `requestFields[]` before cascade — `parameters` is then the input source. Set `additionalProperties: false`. `mapping.path` must list every `{token}` in `object.path` by property name (CLI validates client-side).
|
|
93
|
-
|
|
94
|
-
`outputSchema` is a real JSON Schema built from `Data.responseFields` (walk like `inputSchema.properties`). Do not ship `{"type":"object","additionalProperties":true}`. `"{}"` only when the activity genuinely has no response body.
|
|
95
|
-
|
|
96
|
-
## Workflow (commands)
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
# 0 — folders (once per machine); personal workspace needs --folder-key, not --folder-path
|
|
100
|
-
uip or folders list --output json
|
|
101
|
-
|
|
102
|
-
# 1 — confirm / create the `uipath`-type server (slug ^[a-z0-9-]+$, len 3-50)
|
|
103
|
-
uip agenthub mcp list --folder-path <folder> --output-filter "Data.items[].slug" --output json
|
|
104
|
-
# server folder unknown → uip agenthub mcp list --all-folders --output json (then use its folder on every later call)
|
|
105
|
-
uip agenthub mcp create uipath --name "<display>" --slug <slug> --folder-path <folder> --output json
|
|
106
|
-
|
|
107
|
-
# 2 — connector key + activity (vendor name ≠ connector key; e.g. Slack → uipath-salesforce-slack)
|
|
108
|
-
uip agenthub mcp-tools candidates --category is-activity --name <vendor> --output json
|
|
109
|
-
uip agenthub mcp-tools candidates --category is-activity --connector <key> --output json
|
|
110
|
-
# Read Data.items[].{connectorKey, objectName, methodName, displayName}. Multi-candidate → Pre-flight 2.
|
|
111
|
-
|
|
112
|
-
# 3 — describe: operations, then field metadata (cascade/reference mechanics → platform refs)
|
|
113
|
-
uip is resources describe <key> <objectName> --connection-id <id> --output json # Data.availableOperations[]
|
|
114
|
-
uip is resources describe <key> <objectName> --connection-id <id> --operation <op> --output json
|
|
115
|
-
# requestFields[] (body), parameters[] (path/query/header), responseFields[] (output).
|
|
116
|
-
# Short requestFields → curated: cascade with -f. [READ FIRST, mandatory even if you know the fields: resources.md §Parent-Field-Driven Custom Fields]
|
|
117
|
-
|
|
118
|
-
# 4 — connections across ALL folders (mandatory even when the user named the connection; folder may differ from server — step 7 --target-folder-*) [READ: connections.md §Selecting a Connection + §Folder Scoping]
|
|
119
|
-
uip is connections list <connector-key> --all-folders --output json # never the bare form; present name/owner/folder; user picks connection + folder
|
|
120
|
-
|
|
121
|
-
# 5 — label every baked static reference value [READ: reference-resolution.md §Static Reference-Value Labeling]
|
|
122
|
-
uip is resources run list <connector> <reference.objectName> --connection-id <id> --output json
|
|
123
|
-
|
|
124
|
-
# 6 — dry-run preview (skips some server-side checks; can pass while the real POST fails)
|
|
125
|
-
uip agenthub mcp-tools create-is-activity ... --dry-run --output json # inspect Data.resolved.{metadata,inputSchema,outputSchema}
|
|
126
|
-
|
|
127
|
-
# 7 — create
|
|
128
|
-
uip agenthub mcp-tools create-is-activity \
|
|
129
|
-
--mcp <slug> --name "<tool name>" --description "<1-4000 chars; shown in AgentHub UI>" \
|
|
130
|
-
--folder-path "<server folder>" --target-identifier <connection-guid> \
|
|
131
|
-
--target-folder-path "<connection folder; omit to default to server folder>" \
|
|
132
|
-
--metadata "$(jq -c . metadata.json)" --input-schema "$(jq -c . input-schema.json)" \
|
|
133
|
-
--output-schema "$(jq -c . output-schema.json)" --output json # Data.id = created tool ID
|
|
134
|
-
|
|
135
|
-
# 8 — verify (do NOT claim done before this passes)
|
|
136
|
-
uip agenthub mcp-tools list --mcp <slug> --folder-path <folder> --output json
|
|
137
|
-
# Confirm id/name/description/mcpName. High-value tools: smoke-test via `uip is resources run <verb>`.
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
Connection in a different folder than the server → add `--target-folder-path <name>` (or `--target-folder-key <guid>`, never both); resolves to `targetFolderKey`. Omit both → defaults to the server folder.
|
|
141
|
-
|
|
142
|
-
Update (metadata/schemas changed) — scalars only, `--output-schema "{}"` for no response body:
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
uip agenthub mcp-tools update <tool-id> --mcp <slug> --folder-path "<folder>" \
|
|
146
|
-
--metadata "$(jq -c . metadata.json)" --input-schema "$(jq -c . input-schema.json)" \
|
|
147
|
-
--output-schema "$(jq -c . output-schema.json)" --output json
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Delete: `uip agenthub mcp-tools delete <tool-id> --mcp <slug> --folder-key <guid> --output json`.
|
|
151
|
-
Skeleton for `--file`: `uip agenthub mcp-tools template is-activity --output json`.
|
|
152
|
-
|
|
153
|
-
## IS-Activity Troubleshooting
|
|
154
|
-
|
|
155
|
-
- **`Reason: IsActivityNotAvailable`** — environment not in the is-activity rollout (see §Availability). Gate follows the payload: also fires on `create-resource` / `create-raw` / `update` carrying an IS-activity payload. Stop; offer `resource` / `raw` (a genuinely different kind, not the same payload re-verbed); `--force` only for rollout-enrolled tenants.
|
|
156
|
-
- **HTTP 400, no detail** — re-run `--dry-run`; CLI surfaces ASP.NET ProblemDetails as an `Errors` field of per-field failures.
|
|
157
|
-
- **404 at runtime** — `metadata.mapping.path` missing a `{token}` from `object.path`. List every placeholder and retry.
|
|
158
|
-
- **`Reason: CrossFolderConnection`** — connection in a different folder than the server. Pass `--target-folder-path <name>` / `--target-folder-key <guid>` for the connection's folder (guard allows an explicit target folder), or pick a `Data.candidates` entry via `--target-identifier <guid>`, or move the connection / server.
|
|
159
|
-
- **`Operation 'X' not found. Available: <Y>`** — curated activity exposes only `Y`. Re-run `describe` without `--operation`, pick from `Data.availableOperations[]`.
|
|
160
|
-
- **`No api-type ObjectAction matched for fields [...]`** — `-f` set matches no registered action, or `--action` was passed when it should be omitted (Jira `curated_create_issue` Create). Drop `--action` first; else inspect `connectorMethodInfo.design.actions[]` / `objectActions[]` for required `-f` shapes.
|
|
161
|
-
- **Form renders raw scalar (`OR`, `3`) instead of a labeled value** — `designTimeLookups[<field>]` missing (Rule 4 / Step 5), then `mcp-tools update <tool-id>`.
|
|
162
|
-
- **`ConflictingInput: Use exactly one of --file, --body, or scalar options.`** — pass schemas as scalars, not `--file`.
|
|
163
|
-
- **`Unexpected end of JSON input` on `--output-schema`** — pass `"{}"` for no-response-body activities.
|
|
164
|
-
- **`connections list <key>` empty / misses a known connection** — `--all-folders` missing; without it the call silently scopes to the current context. Re-run with `--all-folders` (mutually exclusive with `--folder` / `--folder-key`). Cross-folder is allowed — reference it via `--target-folder-path` / `--target-folder-key` (Rule 2); do NOT move the connection to the server folder. (`connections.md` §`Folder Scoping`)
|
|
165
|
-
- **`Reason: TargetFolderMismatch` / `AmbiguousConnection`** — `--target-name` + explicit `--target-folder-*`: zero / multiple connections for the connector in the requested folder. Pick from `Data.candidates`, re-run with `--target-identifier <conn-guid>`.
|
|
166
|
-
- **403 Forbidden at runtime** — connection scope mismatch; re-authorize via `uip is connections edit <id>` with broader scopes (`connections.md` §`Scope-Related Errors`).
|
|
167
|
-
|
|
168
|
-
For generic AgentHub-MCP issues (slug regex, folder context, refresh-tools async/sync, `mcp delete` lookup), see SKILL.md §Troubleshooting.
|