edgegate-mcp 0.4.0 → 0.7.0
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/README.md +22 -3
- package/dist/client.d.ts +27 -1
- package/dist/client.js +55 -0
- package/dist/client.js.map +1 -1
- package/dist/server.js +135 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/change_member_role.d.ts +18 -0
- package/dist/tools/change_member_role.js +61 -0
- package/dist/tools/change_member_role.js.map +1 -0
- package/dist/tools/connect_huggingface.d.ts +15 -0
- package/dist/tools/connect_huggingface.js +83 -0
- package/dist/tools/connect_huggingface.js.map +1 -0
- package/dist/tools/connect_qaihub.d.ts +15 -0
- package/dist/tools/connect_qaihub.js +62 -0
- package/dist/tools/connect_qaihub.js.map +1 -0
- package/dist/tools/create_api_key.d.ts +18 -0
- package/dist/tools/create_api_key.js +73 -0
- package/dist/tools/create_api_key.js.map +1 -0
- package/dist/tools/create_pipeline.d.ts +30 -0
- package/dist/tools/create_pipeline.js +31 -0
- package/dist/tools/create_pipeline.js.map +1 -1
- package/dist/tools/create_workspace.d.ts +12 -0
- package/dist/tools/create_workspace.js +51 -0
- package/dist/tools/create_workspace.js.map +1 -0
- package/dist/tools/disconnect_huggingface.d.ts +12 -0
- package/dist/tools/disconnect_huggingface.js +44 -0
- package/dist/tools/disconnect_huggingface.js.map +1 -0
- package/dist/tools/disconnect_qaihub.d.ts +12 -0
- package/dist/tools/disconnect_qaihub.js +42 -0
- package/dist/tools/disconnect_qaihub.js.map +1 -0
- package/dist/tools/get_huggingface_integration.d.ts +12 -0
- package/dist/tools/get_huggingface_integration.js +52 -0
- package/dist/tools/get_huggingface_integration.js.map +1 -0
- package/dist/tools/get_qaihub_integration.d.ts +12 -0
- package/dist/tools/get_qaihub_integration.js +52 -0
- package/dist/tools/get_qaihub_integration.js.map +1 -0
- package/dist/tools/invite_member.d.ts +18 -0
- package/dist/tools/invite_member.js +85 -0
- package/dist/tools/invite_member.js.map +1 -0
- package/dist/tools/list_api_keys.d.ts +12 -0
- package/dist/tools/list_api_keys.js +51 -0
- package/dist/tools/list_api_keys.js.map +1 -0
- package/dist/tools/list_members.d.ts +12 -0
- package/dist/tools/list_members.js +43 -0
- package/dist/tools/list_members.js.map +1 -0
- package/dist/tools/publish_promptpack.d.ts +18 -0
- package/dist/tools/publish_promptpack.js +108 -0
- package/dist/tools/publish_promptpack.js.map +1 -0
- package/dist/tools/remove_member.d.ts +15 -0
- package/dist/tools/remove_member.js +64 -0
- package/dist/tools/remove_member.js.map +1 -0
- package/dist/tools/revoke_api_key.d.ts +15 -0
- package/dist/tools/revoke_api_key.js +49 -0
- package/dist/tools/revoke_api_key.js.map +1 -0
- package/dist/types.d.ts +84 -0
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/plugin.json +6 -2
- package/skills/edgegate-connect-huggingface.md +64 -0
- package/skills/edgegate-connect-qaihub.md +56 -0
- package/skills/edgegate-import.md +2 -2
- package/skills/edgegate-init.md +17 -0
- package/skills/edgegate-members.md +51 -0
- package/skills/edgegate-promptpacks.md +22 -5
- package/skills/edgegate-workspace-setup.md +74 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: edgegate-connect-huggingface
|
|
3
|
+
description: Connect a personal HuggingFace token to the active workspace so EdgeGate can import private, gated, or Qualcomm-org repos. Walk the user through generating a token, confirming the account, and remembering that rotation is non-disruptive.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /edgegate-connect-huggingface
|
|
7
|
+
|
|
8
|
+
Use this skill when the user wants to import a HuggingFace model that the
|
|
9
|
+
anonymous endpoint can't reach — common cases:
|
|
10
|
+
|
|
11
|
+
- `qualcomm/*` (Qualcomm's own optimized model org)
|
|
12
|
+
- `Intel/*` and many `Xenova/*` repos
|
|
13
|
+
- The user's own private repository
|
|
14
|
+
- Any gated model (Llama family, some image models, etc.) the user has access to
|
|
15
|
+
|
|
16
|
+
The workspace integration encrypts the token at rest using the same KMS as the
|
|
17
|
+
AI Hub token; it is never echoed in plaintext after the initial connect.
|
|
18
|
+
|
|
19
|
+
## Steps
|
|
20
|
+
|
|
21
|
+
1. **Confirm the active workspace.** If you don't already know which workspace
|
|
22
|
+
the user is operating on, call `edgegate_setup_workspace` first.
|
|
23
|
+
|
|
24
|
+
2. **Check whether a token is already connected.** Call
|
|
25
|
+
`edgegate_get_huggingface_integration`. If a token is already active,
|
|
26
|
+
confirm with the user whether they want to **rotate** (replace) it before
|
|
27
|
+
asking for a new one.
|
|
28
|
+
|
|
29
|
+
3. **Walk the user through generating a token** if they don't already have one.
|
|
30
|
+
- Open <https://huggingface.co/settings/tokens>
|
|
31
|
+
- Click **Create new token**
|
|
32
|
+
- Default scope is `Read` — that's enough for the import flow
|
|
33
|
+
- Copy the token. It starts with `hf_…` and is shown exactly once
|
|
34
|
+
|
|
35
|
+
4. **Call `edgegate_connect_huggingface`** with the token. The tool validates
|
|
36
|
+
it against HF's `whoami` endpoint before storing, so a typo'd or revoked
|
|
37
|
+
token surfaces as a clean 400 with guidance — not a silent failure later
|
|
38
|
+
during import.
|
|
39
|
+
|
|
40
|
+
5. **Confirm.** The tool response includes the HF `account_name` and
|
|
41
|
+
`account_type`. Confirm that matches the user's expectation — for example,
|
|
42
|
+
if they meant to use their org account but the response shows their
|
|
43
|
+
personal handle, offer to rotate with the right token.
|
|
44
|
+
|
|
45
|
+
6. **Move on.** Tell the user the integration is live and that they can now
|
|
46
|
+
call `edgegate_import_huggingface_model` against any repo their token can
|
|
47
|
+
read (including the Qualcomm org).
|
|
48
|
+
|
|
49
|
+
## Failure modes
|
|
50
|
+
|
|
51
|
+
- **400 "does not look like a HuggingFace token"** — they pasted something
|
|
52
|
+
that doesn't start with `hf_` or `api_`. Direct them back to
|
|
53
|
+
<https://huggingface.co/settings/tokens>.
|
|
54
|
+
- **400 "HuggingFace rejected the token"** — token is real-shaped but HF
|
|
55
|
+
returned 401. Common causes: typo, copied truncated value, token revoked.
|
|
56
|
+
Suggest regenerating.
|
|
57
|
+
- **409 conflict** — the tool auto-rotates on conflict, so this shouldn't
|
|
58
|
+
bubble up. If it does, the rotation also failed; surface the error.
|
|
59
|
+
|
|
60
|
+
## Removing the integration
|
|
61
|
+
|
|
62
|
+
If the user wants to remove the token (offboarding, key rotation policy,
|
|
63
|
+
account change), call `edgegate_disconnect_huggingface`. The encrypted token
|
|
64
|
+
is deleted; future imports fall back to anonymous access.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: edgegate-connect-qaihub
|
|
3
|
+
description: Connect a Qualcomm AI Hub API token to the active EdgeGate workspace so runs can compile and profile models on real Snapdragon devices. Required before any pipeline can actually execute.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /edgegate-connect-qaihub
|
|
7
|
+
|
|
8
|
+
Use this skill when the user is setting up a new EdgeGate workspace, has just
|
|
9
|
+
created one with `edgegate_create_workspace`, or is seeing runs fail with
|
|
10
|
+
`NO_AIHUB_TOKEN`.
|
|
11
|
+
|
|
12
|
+
Qualcomm AI Hub is the device cloud EdgeGate uses behind the scenes — every
|
|
13
|
+
compile + profile + inference job runs against a real Snapdragon device there.
|
|
14
|
+
Without a token connected, the worker can't talk to Hub, so runs that reach the
|
|
15
|
+
worker fail fast.
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
1. **Confirm the active workspace.** If you don't already know which workspace,
|
|
20
|
+
call `edgegate_setup_workspace` first.
|
|
21
|
+
|
|
22
|
+
2. **Check whether a token is already connected.** Call
|
|
23
|
+
`edgegate_get_qaihub_integration`. If the response says **active** with a
|
|
24
|
+
`token_last4`, ask the user whether they want to **rotate** (replace) the
|
|
25
|
+
existing token before continuing. If the response is 404, they need to
|
|
26
|
+
connect for the first time.
|
|
27
|
+
|
|
28
|
+
3. **Walk the user through generating a Qualcomm AI Hub token** if they don't
|
|
29
|
+
already have one:
|
|
30
|
+
- Open <https://app.aihub.qualcomm.com/account/api-token>
|
|
31
|
+
- Click **Generate new token** (or copy the existing one if shown)
|
|
32
|
+
- The token is a long alphanumeric string; copy it
|
|
33
|
+
|
|
34
|
+
4. **Call `edgegate_connect_qaihub`** with the token. The backend stores it
|
|
35
|
+
under envelope encryption using the workspace KMS — the plaintext is
|
|
36
|
+
never returned again, and only `token_last4` is visible afterwards.
|
|
37
|
+
|
|
38
|
+
5. **Confirm + next step.** Tell the user the integration is live. If this is
|
|
39
|
+
their first connection, suggest:
|
|
40
|
+
- `edgegate_create_promptpack` (if they need a new promptpack)
|
|
41
|
+
- `edgegate_create_pipeline` to define their first regression gate
|
|
42
|
+
|
|
43
|
+
## Failure modes
|
|
44
|
+
|
|
45
|
+
- **Already exists (409 conflict)** — the tool transparently rotates instead
|
|
46
|
+
of failing, so the user shouldn't see this. If it does bubble up, the
|
|
47
|
+
rotation also failed and the backend error message comes through.
|
|
48
|
+
- **500 from Qualcomm AI Hub itself** — usually a transient outage at Hub
|
|
49
|
+
(`https://app.aihub.qualcomm.com`). Ask the user to retry in a minute.
|
|
50
|
+
|
|
51
|
+
## Removing the integration
|
|
52
|
+
|
|
53
|
+
If the user wants to disconnect (offboarding, key rotation policy, account
|
|
54
|
+
change), call `edgegate_disconnect_qaihub`. The encrypted token is deleted
|
|
55
|
+
and new runs in the workspace fail with `NO_AIHUB_TOKEN` until a fresh
|
|
56
|
+
token is connected.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: edgegate-import
|
|
3
|
-
description: Import a
|
|
3
|
+
description: Import a Hugging Face model (ONNX) into EdgeGate. Use when the user says "import model from huggingface", "pull this HF model", or references an "<owner>/<name>" repo they want to gate. Supports both anonymous (public repos) and personal-token (private / gated / qualcomm-org repos via /edgegate-connect-huggingface) flows.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /edgegate-import
|
|
@@ -45,5 +45,5 @@ Use this skill when the user says any of:
|
|
|
45
45
|
## Failure modes
|
|
46
46
|
|
|
47
47
|
- **"no ONNX file found"** — The repo doesn't contain a pre-built ONNX. EdgeGate v1 only supports repos with a pre-built ONNX file. Point the user to the dashboard upload flow for converting their own model: `https://edgegate.frozo.ai/workspace/<id>/models`.
|
|
48
|
-
- **"private repo"** —
|
|
48
|
+
- **"private repo" / 401 from HuggingFace** — The anonymous endpoint can't read the repo (gated org like `qualcomm/*`, the user's own private repo, or a gated Llama family model). Offer to run `/edgegate-connect-huggingface` to attach a personal HF token to the workspace; once connected the same import call will succeed.
|
|
49
49
|
- **402 — plan limit** — Direct the user to `https://edgegate.frozo.ai/pricing` to upgrade.
|
package/skills/edgegate-init.md
CHANGED
|
@@ -13,6 +13,10 @@ Goal of this skill: take the user from "I have a model file" to "every PR is aut
|
|
|
13
13
|
|
|
14
14
|
1. **Confirm workspace.** Call `edgegate_setup_workspace` with no args. Present the list. Ask the user which one to use; if they say "the first one", pick `result[0].id`. Confirm before continuing.
|
|
15
15
|
|
|
16
|
+
If the list is empty OR the user wants a new workspace for this project, route to `/edgegate-workspace-setup` instead — that flow creates the workspace, connects Qualcomm AI Hub, optionally mints an API key for CI, and optionally invites teammates, all from chat.
|
|
17
|
+
|
|
18
|
+
If they have a workspace but it's missing the Qualcomm AI Hub integration (runs would fail with `NO_AIHUB_TOKEN`), run `/edgegate-connect-qaihub` first.
|
|
19
|
+
|
|
16
20
|
2. **Define the pipeline.** Ask the user:
|
|
17
21
|
- "Which model file do you want to gate? (path or artifact_id)"
|
|
18
22
|
- "Which Snapdragon devices? (default: Samsung Galaxy S24, Galaxy S23)"
|
|
@@ -20,6 +24,8 @@ Goal of this skill: take the user from "I have a model file" to "every PR is aut
|
|
|
20
24
|
|
|
21
25
|
If they hand you a file path (e.g. `./model.onnx`), tell them they need to upload it via the dashboard first to get an artifact_id (the MCP tool does not handle uploads in v1.0). Link: `https://edgegate.frozo.ai/workspace/{workspace_id}/models`.
|
|
22
26
|
|
|
27
|
+
If they hand you a HuggingFace repo id (e.g. `microsoft/resnet-50`), call `edgegate_import_huggingface_model` to import it and get an artifact_id back. If the repo is private / gated / from the Qualcomm org, the import will 401 — offer to run `/edgegate-connect-huggingface` to attach a personal HF token to the workspace, then retry the import.
|
|
28
|
+
|
|
23
29
|
If they hand you an artifact_id, proceed to `edgegate_create_pipeline`.
|
|
24
30
|
|
|
25
31
|
3. **Trigger the first run.** Call `edgegate_run_gate` with the workspace_id + new pipeline_id. Tell the user the run_id. Note that runs take 3-5 min per device.
|
|
@@ -28,6 +34,17 @@ Goal of this skill: take the user from "I have a model file" to "every PR is aut
|
|
|
28
34
|
|
|
29
35
|
5. **Confirm.** Tell the user what's now set up: workspace `<name>`, pipeline `<name>`, run `<id>` in flight, and (if applicable) GitHub Action wired.
|
|
30
36
|
|
|
37
|
+
## Input shape overrides (`input_specs`)
|
|
38
|
+
|
|
39
|
+
If creating a pipeline for a text or audio model, the backend auto-resolves dynamic shapes
|
|
40
|
+
(defaults: batch=1, sequence=128). If those defaults don't fit — long-context LLM, custom
|
|
41
|
+
audio model, or mixed-input model — pass `input_specs` explicitly with the right shape per input.
|
|
42
|
+
|
|
43
|
+
Examples:
|
|
44
|
+
- Long-context BERT (seq_len=512): `{ input_ids: { shape: [1, 512], dtype: "int64" }, attention_mask: { shape: [1, 512], dtype: "int64" } }`
|
|
45
|
+
- Audio model (mel-spectrogram): `{ mel_features: { shape: [1, 80, 3000], dtype: "float32" } }`
|
|
46
|
+
- Image model: omit entirely — the backend reads static shapes from the ONNX file.
|
|
47
|
+
|
|
31
48
|
## Failure modes
|
|
32
49
|
|
|
33
50
|
- **No workspaces.** The API key may have been revoked. Direct the user to `https://edgegate.frozo.ai/workspace/<id>/settings#api-keys` to generate a fresh key.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: edgegate-members
|
|
3
|
+
description: List, invite, change role of, or remove EdgeGate workspace members. Use for any "add Alice as admin", "show me who's on this workspace", "Bob left the team", or similar membership management.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /edgegate-members
|
|
7
|
+
|
|
8
|
+
Composes the four member tools into a single skill the LLM can route any
|
|
9
|
+
membership-management request through.
|
|
10
|
+
|
|
11
|
+
## Roles
|
|
12
|
+
|
|
13
|
+
| Role | Can do | Can NOT do |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `owner` | Everything: members, billing, delete workspace, AI Hub connect, pipelines, runs | (nothing — full power) |
|
|
16
|
+
| `admin` | Pipelines, runs, integrations, members (except adding owners) | Billing, delete workspace, downgrade self |
|
|
17
|
+
| `viewer` | Read pipelines, runs, reports, members | Anything write |
|
|
18
|
+
|
|
19
|
+
## Steps by intent
|
|
20
|
+
|
|
21
|
+
### "Show me the members" / "Who's on this workspace?"
|
|
22
|
+
Call `edgegate_list_members({ workspace_id })`. Returns email + role + user_id.
|
|
23
|
+
|
|
24
|
+
### "Add Alice as admin"
|
|
25
|
+
1. Call `edgegate_invite_member({ workspace_id, user_email, role })`.
|
|
26
|
+
2. If the response is 404, Alice doesn't have an EdgeGate account yet — tell
|
|
27
|
+
the user Alice needs to register at <https://edgegate.frozo.ai/register>
|
|
28
|
+
first, then re-run.
|
|
29
|
+
3. If 409, Alice is already a member — offer to update her role with
|
|
30
|
+
`/edgegate-members → change role` instead.
|
|
31
|
+
|
|
32
|
+
### "Make Bob an owner" / "Downgrade Carol to viewer"
|
|
33
|
+
1. Get Bob's user_id from `edgegate_list_members` if not already known.
|
|
34
|
+
2. Call `edgegate_change_member_role({ workspace_id, user_id, role })`.
|
|
35
|
+
3. If the response is 400 with "Cannot remove the last owner", explain to
|
|
36
|
+
the user: they need to promote another member to owner first, then come
|
|
37
|
+
back to downgrade the original owner.
|
|
38
|
+
|
|
39
|
+
### "Remove Dave"
|
|
40
|
+
1. Get Dave's user_id.
|
|
41
|
+
2. Confirm with the user (this is destructive — Dave loses access
|
|
42
|
+
immediately). Mention that Dave's pipelines and runs are preserved.
|
|
43
|
+
3. Call `edgegate_remove_member({ workspace_id, user_id })`.
|
|
44
|
+
4. Same last-owner guard as above applies.
|
|
45
|
+
|
|
46
|
+
## Failure modes
|
|
47
|
+
|
|
48
|
+
- **403** on invite / change / remove — the caller's own role is too low. The
|
|
49
|
+
detail message names the required role.
|
|
50
|
+
- **404** on user lookup — the email or user_id doesn't exist in EdgeGate.
|
|
51
|
+
- **plan_limit_exceeded** on invite — workspace seat cap; direct to pricing.
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: edgegate-promptpacks
|
|
3
|
-
description: List or
|
|
3
|
+
description: List, create, or publish EdgeGate promptpacks. Use when the user says "list my promptpacks", "what packs do I have", "create a promptpack", "make a new pack", "publish a pack", "I need a text embedding pack", or any variation on viewing, authoring, or activating test-case packs for EdgeGate pipelines.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /edgegate-promptpacks
|
|
7
7
|
|
|
8
|
-
The user wants to list existing promptpacks in their workspace,
|
|
8
|
+
The user wants to list existing promptpacks in their workspace, create a new one, or publish one so it is usable in pipelines.
|
|
9
9
|
|
|
10
10
|
## Triggers
|
|
11
11
|
|
|
12
12
|
Use this skill when the user says any of:
|
|
13
13
|
- "list my promptpacks" / "what packs do I have" / "show my packs"
|
|
14
14
|
- "create a promptpack" / "make a new pack" / "add test cases"
|
|
15
|
+
- "publish a promptpack" / "activate a pack" / "make this pack usable"
|
|
15
16
|
- "I need a text embedding pack" / "create an LLM completion benchmark"
|
|
16
17
|
- "set up test cases for my image classification model"
|
|
17
18
|
|
|
@@ -31,6 +32,12 @@ Use this skill when the user says any of:
|
|
|
31
32
|
b. Suggest 3–5 sensible test cases based on use case (Claude can generate them — see templates below).
|
|
32
33
|
c. Confirm `promptpack_id` (slug, no spaces), `version` (start at `1.0.0` unless user says otherwise), and `name`.
|
|
33
34
|
d. Call `edgegate_create_promptpack(...)`.
|
|
35
|
+
e. **Immediately publish** — call `edgegate_publish_promptpack({ workspace_id, promptpack_id, version })` right after creation. Do NOT wait for the user to ask. Packs start as `published: false` and are unusable in pipelines until published.
|
|
36
|
+
|
|
37
|
+
4. **If publishing an existing pack:**
|
|
38
|
+
- Confirm `promptpack_id` and `version` (use `edgegate_list_promptpacks` if unsure).
|
|
39
|
+
- Call `edgegate_publish_promptpack({ workspace_id, promptpack_id, version })`.
|
|
40
|
+
- The operation is idempotent — safe to call even if already published.
|
|
34
41
|
|
|
35
42
|
## Case templates by model type
|
|
36
43
|
|
|
@@ -71,10 +78,20 @@ Use this skill when the user says any of:
|
|
|
71
78
|
|
|
72
79
|
- Start at `1.0.0` unless the user specifies otherwise.
|
|
73
80
|
- Packs are **immutable** — to update, bump the patch (e.g. `1.0.0` → `1.0.1`) and create a new pack.
|
|
74
|
-
- Only published packs can be referenced in pipelines.
|
|
81
|
+
- Only published packs can be referenced in pipelines. Always call `edgegate_publish_promptpack` immediately after `edgegate_create_promptpack` — do not make the user do this manually.
|
|
82
|
+
|
|
83
|
+
## Full lifecycle (always follow this sequence)
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
edgegate_create_promptpack(...) # creates pack with published=false
|
|
87
|
+
edgegate_publish_promptpack(...) # publishes it — now usable in pipelines
|
|
88
|
+
edgegate_create_pipeline(...) # can now reference the promptpack_id
|
|
89
|
+
```
|
|
75
90
|
|
|
76
91
|
## Failure modes
|
|
77
92
|
|
|
78
|
-
- **409 conflict** — (promptpack_id, version) already exists. Bump the version and retry.
|
|
93
|
+
- **409 conflict on create** — (promptpack_id, version) already exists. Bump the version and retry.
|
|
94
|
+
- **409 "already published" on publish** — treated as success (idempotent); the pack is already live.
|
|
79
95
|
- **403 forbidden** — user needs admin role on the workspace.
|
|
80
|
-
- **
|
|
96
|
+
- **404 on publish** — promptpack_id or version not found; confirm with `edgegate_list_promptpacks`.
|
|
97
|
+
- **400 / schema error on create** — surface the `issues` array to the user; common causes are `case_id` with spaces or special characters, `max_new_tokens` > 256, or more than 50 cases.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: edgegate-workspace-setup
|
|
3
|
+
description: Bootstrap a new EdgeGate workspace end-to-end — create the workspace, connect Qualcomm AI Hub, mint an API key, and (optionally) invite teammates. Use this when the user has registered but hasn't yet set up a workspace, or wants a parallel one for a new project.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /edgegate-workspace-setup
|
|
7
|
+
|
|
8
|
+
This is the **zero-to-runnable workspace** flow. It composes the other
|
|
9
|
+
single-purpose tools into a single guided onboarding sequence so the user can
|
|
10
|
+
go from "I just signed up" to "EdgeGate is running my model on a Snapdragon
|
|
11
|
+
device" without leaving the chat.
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- User just signed up at <https://edgegate.frozo.ai/register> and wants to
|
|
16
|
+
start using the MCP
|
|
17
|
+
- User is creating a parallel workspace for a new project / customer / branch
|
|
18
|
+
- User says "set up EdgeGate for me", "create a new workspace and wire it up",
|
|
19
|
+
or similar
|
|
20
|
+
|
|
21
|
+
If they already have a usable workspace and just need to connect AI Hub or
|
|
22
|
+
add members, send them to `/edgegate-connect-qaihub` or
|
|
23
|
+
`/edgegate-invite-member` directly instead.
|
|
24
|
+
|
|
25
|
+
## Steps
|
|
26
|
+
|
|
27
|
+
1. **Create the workspace.** Ask for a name (e.g. "MobileNet Production",
|
|
28
|
+
"Customer Pilot — Bosch"). Call `edgegate_create_workspace({ name })` and
|
|
29
|
+
capture the returned `workspace_id`. Pass that id to every subsequent call.
|
|
30
|
+
|
|
31
|
+
2. **Connect Qualcomm AI Hub.** Without this, runs will fail with
|
|
32
|
+
`NO_AIHUB_TOKEN`. Either:
|
|
33
|
+
- Run the `/edgegate-connect-qaihub` sub-flow, **or**
|
|
34
|
+
- If the user has their AI Hub token at hand, call
|
|
35
|
+
`edgegate_connect_qaihub({ workspace_id, token })` directly.
|
|
36
|
+
|
|
37
|
+
Pause here until the integration is **active**.
|
|
38
|
+
|
|
39
|
+
3. **(Optional) Mint a CI API key.** If the user plans to wire EdgeGate into
|
|
40
|
+
GitHub Actions / GitLab CI / similar, call `edgegate_create_api_key` with
|
|
41
|
+
a descriptive name (e.g. "GitHub Actions — production"). **Tell them the
|
|
42
|
+
plaintext is returned exactly once** and they MUST copy it now into their
|
|
43
|
+
CI secrets manager. Re-show the value, then move on. If they want to
|
|
44
|
+
actually wire the GitHub Action immediately, follow up with
|
|
45
|
+
`edgegate_setup_github_action`.
|
|
46
|
+
|
|
47
|
+
4. **(Optional) Invite teammates.** If the user mentions teammates, run the
|
|
48
|
+
`/edgegate-invite-member` sub-flow or call `edgegate_invite_member`
|
|
49
|
+
directly per teammate. Roles: `owner` (full control, billing), `admin`
|
|
50
|
+
(pipelines + runs, no billing or workspace delete), `viewer` (read-only).
|
|
51
|
+
|
|
52
|
+
5. **Confirm + suggest next.** Recap what's set up:
|
|
53
|
+
- workspace name + id
|
|
54
|
+
- AI Hub: connected (token `****xxxx`)
|
|
55
|
+
- API keys: how many active
|
|
56
|
+
- members: count + roles
|
|
57
|
+
|
|
58
|
+
Then suggest the next concrete action:
|
|
59
|
+
- "Import a model from HuggingFace: `edgegate_import_huggingface_model`"
|
|
60
|
+
- "Create the first regression pipeline: `edgegate_create_pipeline`"
|
|
61
|
+
|
|
62
|
+
## Failure modes
|
|
63
|
+
|
|
64
|
+
- **Create workspace → 403 plan_limit_exceeded.** They've hit their plan's
|
|
65
|
+
workspace cap. Direct them to <https://edgegate.frozo.ai/pricing> to
|
|
66
|
+
upgrade, or to remove an unused workspace via the dashboard first.
|
|
67
|
+
- **Connect AI Hub → 401 from Hub.** The token they pasted is wrong or
|
|
68
|
+
revoked. Send them back to
|
|
69
|
+
<https://app.aihub.qualcomm.com/account/api-token> for a fresh one.
|
|
70
|
+
- **Create API key → 402.** Their plan doesn't include API access. Pro tier
|
|
71
|
+
or above is required; direct them to pricing.
|
|
72
|
+
- **Invite member → 404.** The email doesn't belong to an existing EdgeGate
|
|
73
|
+
account. v1 doesn't send invitation emails — the teammate has to register
|
|
74
|
+
first at <https://edgegate.frozo.ai/register>.
|