@cloudgrid-io/mcp 0.20.4 → 0.20.5

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.
Files changed (125) hide show
  1. package/package.json +2 -2
  2. package/src/corpus/capability-map.md +8 -8
  3. package/src/corpus/cloudgrid-yaml.md +5 -5
  4. package/src/corpus/cookbook.md +1 -1
  5. package/src/corpus/skill-claim.md +1 -1
  6. package/src/corpus/skill-plug.md +1 -1
  7. package/src/corpus/skills-readme.md +1 -1
  8. package/src/corpus/templates/ai-knowledge-base/AGENTS.md +1 -1
  9. package/src/corpus/templates/ai-knowledge-base/index.md +1 -1
  10. package/src/corpus/templates/api-docs/README.md +2 -2
  11. package/src/corpus/templates/api-docs/index.md +3 -3
  12. package/src/corpus/templates/appointment-booking/AGENTS.md +7 -7
  13. package/src/corpus/templates/appointment-booking/index.md +5 -5
  14. package/src/corpus/templates/approval-workflow/AGENTS.md +2 -2
  15. package/src/corpus/templates/approval-workflow/index.md +2 -2
  16. package/src/corpus/templates/billing-dashboard/index.md +1 -1
  17. package/src/corpus/templates/calendar-scheduler/AGENTS.md +1 -1
  18. package/src/corpus/templates/calendar-scheduler/index.md +1 -1
  19. package/src/corpus/templates/changelog/README.md +2 -2
  20. package/src/corpus/templates/changelog/index.md +3 -3
  21. package/src/corpus/templates/company-website/README.md +3 -3
  22. package/src/corpus/templates/company-website/cloudgrid.yaml +1 -1
  23. package/src/corpus/templates/company-website/index.md +3 -3
  24. package/src/corpus/templates/course-platform/index.md +1 -1
  25. package/src/corpus/templates/dashboard/cloudgrid.yaml +1 -1
  26. package/src/corpus/templates/dashboard/index.md +3 -3
  27. package/src/corpus/templates/deck/cloudgrid.yaml +1 -1
  28. package/src/corpus/templates/deck/index.md +3 -3
  29. package/src/corpus/templates/docs-site/README.md +2 -2
  30. package/src/corpus/templates/docs-site/index.md +3 -3
  31. package/src/corpus/templates/forum/AGENTS.md +4 -4
  32. package/src/corpus/templates/forum/index.md +1 -1
  33. package/src/corpus/templates/hr-portal/index.md +1 -1
  34. package/src/corpus/templates/internal-tools-portal/index.md +1 -1
  35. package/src/corpus/templates/landing-page/cloudgrid.yaml +1 -1
  36. package/src/corpus/templates/landing-page/index.md +3 -3
  37. package/src/corpus/templates/lms/index.md +1 -1
  38. package/src/corpus/templates/marketplace/AGENTS.md +1 -1
  39. package/src/corpus/templates/marketplace/index.md +1 -1
  40. package/src/corpus/templates/membership-site/AGENTS.md +7 -7
  41. package/src/corpus/templates/membership-site/index.md +5 -5
  42. package/src/corpus/templates/online-store/index.md +1 -1
  43. package/src/corpus/templates/portfolio/README.md +2 -2
  44. package/src/corpus/templates/portfolio/index.md +3 -3
  45. package/src/corpus/templates/product-launch/README.md +3 -3
  46. package/src/corpus/templates/product-launch/cloudgrid.yaml +1 -1
  47. package/src/corpus/templates/product-launch/index.md +3 -3
  48. package/src/corpus/templates/report/cloudgrid.yaml +1 -1
  49. package/src/corpus/templates/report/index.md +3 -3
  50. package/src/corpus/templates/restaurant-reservations/AGENTS.md +7 -7
  51. package/src/corpus/templates/restaurant-reservations/index.md +2 -2
  52. package/src/corpus/templates/saas-marketing/README.md +2 -2
  53. package/src/corpus/templates/saas-marketing/index.md +3 -3
  54. package/src/corpus/templates/status-page/README.md +2 -2
  55. package/src/corpus/templates/status-page/index.md +3 -3
  56. package/src/corpus/templates/subscription-management/AGENTS.md +7 -7
  57. package/src/corpus/templates/subscription-management/index.md +5 -5
  58. package/src/corpus/templates/waitlist/README.md +2 -2
  59. package/src/corpus/templates/waitlist/index.md +3 -3
  60. package/src/corpus/templates/web-app/cloudgrid.yaml +1 -1
  61. package/src/corpus/templates/web-app/index.md +3 -3
  62. package/src/corpus/usage.md +1 -1
  63. package/src/corpus/workflows/admin-dashboard.md +4 -4
  64. package/src/corpus/workflows/ai-app.md +6 -6
  65. package/src/corpus/workflows/ai-knowledge-base.md +4 -4
  66. package/src/corpus/workflows/analytics-dashboard.md +4 -4
  67. package/src/corpus/workflows/api-dashboard.md +4 -4
  68. package/src/corpus/workflows/api-docs.md +2 -2
  69. package/src/corpus/workflows/api-service.md +6 -6
  70. package/src/corpus/workflows/app-with-data.md +6 -6
  71. package/src/corpus/workflows/appointment-booking.md +6 -6
  72. package/src/corpus/workflows/approval-workflow.md +4 -4
  73. package/src/corpus/workflows/billing-dashboard.md +6 -6
  74. package/src/corpus/workflows/blog-cms.md +4 -4
  75. package/src/corpus/workflows/booking-system.md +5 -5
  76. package/src/corpus/workflows/calendar-scheduler.md +4 -4
  77. package/src/corpus/workflows/changelog.md +2 -2
  78. package/src/corpus/workflows/company-website.md +3 -3
  79. package/src/corpus/workflows/course-platform.md +5 -5
  80. package/src/corpus/workflows/crm.md +5 -5
  81. package/src/corpus/workflows/dashboard.md +3 -3
  82. package/src/corpus/workflows/directory.md +4 -4
  83. package/src/corpus/workflows/docs-app.md +6 -6
  84. package/src/corpus/workflows/docs-site.md +2 -2
  85. package/src/corpus/workflows/erp.md +5 -5
  86. package/src/corpus/workflows/event-board.md +4 -4
  87. package/src/corpus/workflows/expense-tracker.md +4 -4
  88. package/src/corpus/workflows/feature-request-board.md +4 -4
  89. package/src/corpus/workflows/financial-dashboard.md +4 -4
  90. package/src/corpus/workflows/forum.md +5 -5
  91. package/src/corpus/workflows/hr-portal.md +5 -5
  92. package/src/corpus/workflows/internal-tools-portal.md +5 -5
  93. package/src/corpus/workflows/inventory.md +4 -4
  94. package/src/corpus/workflows/invoice.md +4 -4
  95. package/src/corpus/workflows/job-board.md +4 -4
  96. package/src/corpus/workflows/kanban.md +5 -5
  97. package/src/corpus/workflows/landing-page.md +3 -3
  98. package/src/corpus/workflows/lms.md +5 -5
  99. package/src/corpus/workflows/marketplace.md +4 -4
  100. package/src/corpus/workflows/membership-site.md +6 -6
  101. package/src/corpus/workflows/monitoring-dashboard.md +4 -4
  102. package/src/corpus/workflows/online-store.md +6 -6
  103. package/src/corpus/workflows/portfolio.md +2 -2
  104. package/src/corpus/workflows/presentation.md +3 -3
  105. package/src/corpus/workflows/product-catalog.md +4 -4
  106. package/src/corpus/workflows/product-launch.md +3 -3
  107. package/src/corpus/workflows/project-management.md +4 -4
  108. package/src/corpus/workflows/property-listings.md +4 -4
  109. package/src/corpus/workflows/quiz-platform.md +4 -4
  110. package/src/corpus/workflows/report.md +3 -3
  111. package/src/corpus/workflows/restaurant-reservations.md +5 -5
  112. package/src/corpus/workflows/revenue-dashboard.md +4 -4
  113. package/src/corpus/workflows/saas-marketing.md +2 -2
  114. package/src/corpus/workflows/semantic-search.md +5 -5
  115. package/src/corpus/workflows/status-page.md +2 -2
  116. package/src/corpus/workflows/subscription-management.md +6 -6
  117. package/src/corpus/workflows/task-manager.md +4 -4
  118. package/src/corpus/workflows/ticket-system.md +4 -4
  119. package/src/corpus/workflows/time-tracking.md +4 -4
  120. package/src/corpus/workflows/travel-booking.md +5 -5
  121. package/src/corpus/workflows/waitlist.md +2 -2
  122. package/src/corpus/workflows/web-app.md +3 -3
  123. package/src/session-logger.js +3 -3
  124. package/src/tools.js +129 -89
  125. package/src/widgets/org-picker.html +1 -1
@@ -181,7 +181,7 @@ Runtime app → **local edition** only (Claude Desktop / Claude Code / CLI); the
181
181
  hosted edition cannot build a runtime container. Order matters — `plug` needs a
182
182
  linked directory, so `init` first.
183
183
 
184
- 1. `grid init` (or `grid_init`) an app `<name>` — creates the entity +
184
+ 1. `grid init` (or `grid_create_project`) an app `<name>` — creates the entity +
185
185
  `.cloudgrid/link.json` and a starter `cloudgrid.yaml` with empty `services:{}`.
186
186
  2. Fill: put the app under `services/web/` and set `cloudgrid.yaml` to this
187
187
  blueprint's active fields (`services.web` nextjs `/`, `needs:{database:true}`,
@@ -10,7 +10,7 @@ code** — read the structure guide, then build the app following it.
10
10
  `AGENTS.md`. Fetch the bundle, read `AGENTS.md`, then generate the files under
11
11
  `services/web/` and deploy.
12
12
 
13
- - **Structure guide:** `grid_fetch("template", "marketplace")` → read
13
+ - **Structure guide:** `grid_get_template("template", "marketplace")` → read
14
14
  **`AGENTS.md`** (file tree, Mongo collections, CloudGrid injection table, auth +
15
15
  Stripe Connect wiring, deploy steps, edition note).
16
16
 
@@ -9,7 +9,7 @@ rules — they are what make it deploy.
9
9
 
10
10
  The proven persistent shape is `app-with-data` (Next.js + Mongo). This blueprint
11
11
  extends it with auth + Stripe. Fetch that template for the Mongo lazy-client and
12
- App-Router API pattern: `grid_fetch("template", "app-with-data")`.
12
+ App-Router API pattern: `grid_get_template("template", "app-with-data")`.
13
13
 
14
14
  ## 1. File tree
15
15
 
@@ -78,7 +78,7 @@ A user is a member when a `memberships` doc for their `authId` has
78
78
  STRIPE_WEBHOOK_SECRET: stripe-webhook-secret
79
79
  AUTH_PROVIDER_KEY: auth-provider-key
80
80
  ```
81
- Set the vault items ONCE with `grid_secrets` (or `grid secrets set`), then
81
+ Set the vault items ONCE with `grid_set_secret` (or `grid secrets set`), then
82
82
  the deployer injects each as the named env var (`process.env.STRIPE_KEY`, etc.)
83
83
  at runtime and under `grid dev`. Do NOT commit keys; do NOT set them in
84
84
  `services.web.env` (that block is for non-secret config only). Read them
@@ -132,18 +132,18 @@ A user is a member when a `memberships` doc for their `authId` has
132
132
 
133
133
  1. `grid_login_status` → `grid_login` if needed. Respect the grid picker
134
134
  (ask which grid if the user has more than one).
135
- 2. `grid_init` an app `<name>` FIRST — it creates the entity, writes
135
+ 2. `grid_create_project` an app `<name>` FIRST — it creates the entity, writes
136
136
  `.cloudgrid/link.json`, and a `cloudgrid.yaml` with empty `services: {}`.
137
137
  `plug` needs a linked directory.
138
138
  3. Write the app under `services/web/` and set `cloudgrid.yaml` to the active
139
139
  shape: `name` + `services.web{type: nextjs, path: /}` + `needs:{database:true}`
140
140
  + the `vault:` block.
141
- 4. Set the secrets: `grid_secrets` for `stripe-live-key`,
141
+ 4. Set the secrets: `grid_set_secret` for `stripe-live-key`,
142
142
  `stripe-webhook-secret`, `auth-provider-key` (the vault item keys the
143
143
  `vault:` block maps from). Non-secret config (publishable auth key, price id)
144
- → `grid_env` / `services.web.env`. Do NOT set `DATABASE_MONGODB_URL`
144
+ → `grid_set_env` / `services.web.env`. Do NOT set `DATABASE_MONGODB_URL`
145
145
  yourself — the grid injects it.
146
- 5. `grid_plug` to deploy. A runtime deploy is **ASYNC** — the first response
146
+ 5. `grid_deploy` to deploy. A runtime deploy is **ASYNC** — the first response
147
147
  is `status: building`, not a live URL. Poll `grid_status` (or the returned
148
148
  poll_url) until live; surface a liveness signal while it builds, never a bare
149
149
  silent wait.
@@ -157,4 +157,4 @@ A membership site is a built + deployed runtime container, so it requires the
157
157
  **local edition** (Claude Desktop / Claude Code) or the CLI. The **hosted**
158
158
  edition (Claude Web / hosted MCP) is inline-only and can only publish static
159
159
  pages — it CANNOT build this app. On hosted, say so plainly and offer a static
160
- paywall-landing page (via `grid_plug`) instead, then stop the runtime path.
160
+ paywall-landing page (via `grid_deploy`) instead, then stop the runtime path.
@@ -9,8 +9,8 @@ adapt plans/content/fields, then deploy (async — poll to a live URL). Local
9
9
  edition only.
10
10
 
11
11
  **Fetch the bundle:**
12
- - `grid_fetch("template", "membership-site")` — this blueprint (`cloudgrid.yaml` + `AGENTS.md`).
13
- - `grid_fetch("template", "app-with-data")` — the proven Next.js + Mongo shape to extend (lazy db client, App-Router API).
12
+ - `grid_get_template("template", "membership-site")` — this blueprint (`cloudgrid.yaml` + `AGENTS.md`).
13
+ - `grid_get_template("template", "app-with-data")` — the proven Next.js + Mongo shape to extend (lazy db client, App-Router API).
14
14
 
15
15
  **Key rules:**
16
16
 
@@ -24,7 +24,7 @@ edition only.
24
24
  the getter, never at module top level (top-level read fails `next build`).
25
25
  4. **Secrets via the `vault:` block** → env vars. `STRIPE_KEY`,
26
26
  `STRIPE_WEBHOOK_SECRET`, `AUTH_PROVIDER_KEY` map to vault items; set them with
27
- `grid_secrets`, and the deployer injects them at runtime. Read lazily; do
27
+ `grid_set_secret`, and the deployer injects them at runtime. Read lazily; do
28
28
  not commit keys or put secrets in `services.web.env`.
29
29
  5. **Gate server-side.** Auth answers "who are you"; the `memberships`
30
30
  collection answers "have you paid". `app/members/layout.js` checks membership
@@ -60,7 +60,7 @@ vault:
60
60
 
61
61
  ## Deploy (async, local edition)
62
62
 
63
- `grid_init` first (creates the entity + link.json), write the app under
64
- `services/web/`, set the vault secrets with `grid_secrets`, `grid_plug`
63
+ `grid_create_project` first (creates the entity + link.json), write the app under
64
+ `services/web/`, set the vault secrets with `grid_set_secret`, `grid_deploy`
65
65
  (async — poll `grid_status` to a live URL), then register the `/api/webhook`
66
66
  URL in Stripe and re-plug. Re-plug the same entity to update the same URL.
@@ -74,7 +74,7 @@ needs:
74
74
 
75
75
  ## Build it
76
76
 
77
- Fetch `grid_fetch("template", "online-store")` and read **`AGENTS.md`** — it
77
+ Fetch `grid_get_template("template", "online-store")` and read **`AGENTS.md`** — it
78
78
  has the checkout + webhook wiring, the vault/secret setup, and the deploy steps
79
79
  (`grid init` → write under `services/web/` → `grid secrets set` → `grid plug`,
80
80
  async → poll to a live URL → register the webhook endpoint in Stripe). Adapt the
@@ -3,12 +3,12 @@
3
3
  A single self-contained HTML personal / freelancer portfolio: a hero intro, an about section, a skills list, a projects grid, and a contact section.
4
4
 
5
5
  Static inspiration — a single self-contained `index.html` (inline CSS and JS,
6
- no external CDNs). It deploys instantly via `grid_plug` and works on every
6
+ no external CDNs). It deploys instantly via `grid_deploy` and works on every
7
7
  CloudGrid edition, including hosted.
8
8
 
9
9
  ## Fill it in
10
10
 
11
- Fetch the template with `grid_fetch("template", "portfolio")`, then replace the
11
+ Fetch the template with `grid_get_template("template", "portfolio")`, then replace the
12
12
  placeholders:
13
13
 
14
14
  - The person's name, role/title, and short intro.
@@ -5,13 +5,13 @@ State (if any) lives only in memory and is lost on refresh.
5
5
 
6
6
  ## How it deploys
7
7
 
8
- To publish this page, use **`grid_plug`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
8
+ To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
9
9
  edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
10
10
  directory (`type: static`) is ONLY for plugging the page as an OWNED static
11
- runtime (async, local edition only); the fast path is `grid_plug`.
11
+ runtime (async, local edition only); the fast path is `grid_deploy`.
12
12
 
13
13
  The fillable HTML is the real template — fetch it with
14
- `grid_fetch("template", "portfolio")` and fill in the user's content.
14
+ `grid_get_template("template", "portfolio")` and fill in the user's content.
15
15
 
16
16
  ## cloudgrid.yaml (reference only)
17
17
 
@@ -34,12 +34,12 @@ A one-page launch announcement with:
34
34
  ## How it deploys
35
35
 
36
36
  Deploys as an **inspiration** — instant, and works on the **hosted** edition
37
- (Claude Web) as well as local. Use **`grid_plug`** with the inline `html`: you get a live share URL right away. Re-dropping the same entity
37
+ (Claude Web) as well as local. Use **`grid_deploy`** with the inline `html`: you get a live share URL right away. Re-dropping the same entity
38
38
  updates the same URL, so the user iterates on one link.
39
39
 
40
40
  The reference `cloudgrid.yaml` in this directory (`type: static`) is ONLY for
41
41
  plugging the page as an OWNED static runtime (async, local edition only); the
42
- fast path is `grid_plug`.
42
+ fast path is `grid_deploy`.
43
43
 
44
44
  The fillable HTML is the real template — fetch it with
45
- `grid_fetch("template", "product-launch")` and fill in the user's content.
45
+ `grid_get_template("template", "product-launch")` and fill in the user's content.
@@ -17,7 +17,7 @@
17
17
  # active fields are exactly name + services.web{type: static, path: /}; there
18
18
  # are no needs. This cloudgrid.yaml is the reference for plugging the page as an
19
19
  # OWNED static runtime; the fast path is to deploy it as an INSPIRATION via
20
- # grid_plug (instant, and works on the hosted edition too).
20
+ # grid_deploy (instant, and works on the hosted edition too).
21
21
  # ============================================================================
22
22
 
23
23
 
@@ -8,13 +8,13 @@ client-side.
8
8
 
9
9
  ## How it deploys
10
10
 
11
- To publish this page, use **`grid_plug`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
11
+ To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
12
12
  edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
13
13
  directory (`type: static`) is ONLY for plugging the page as an OWNED static
14
- runtime (async, local edition only); the fast path is `grid_plug`.
14
+ runtime (async, local edition only); the fast path is `grid_deploy`.
15
15
 
16
16
  The fillable HTML is the real template — fetch it with
17
- `grid_fetch("template", "product-launch")` and fill in the user's content
17
+ `grid_get_template("template", "product-launch")` and fill in the user's content
18
18
  (product name, hero copy, countdown target, features, offer, quotes). Keep it a
19
19
  single self-contained file: inline SVG / `data:` URIs only, no external scripts,
20
20
  stylesheets, fonts, or CDNs.
@@ -16,7 +16,7 @@
16
16
  # THIS TEMPLATE (report): a single self-contained static page. The active fields
17
17
  # are exactly name + services.web{type: static, path: /}; there are no needs.
18
18
  # This cloudgrid.yaml is the reference for plugging it as an OWNED static
19
- # runtime; the fast path is to deploy it as an INSPIRATION via grid_plug
19
+ # runtime; the fast path is to deploy it as an INSPIRATION via grid_deploy
20
20
  # (instant, and works on the hosted edition too).
21
21
  # ============================================================================
22
22
 
@@ -5,13 +5,13 @@ no `needs:`. State (if any) lives only in memory and is lost on refresh.
5
5
 
6
6
  ## How it deploys
7
7
 
8
- To publish this page, use **`grid_plug`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
8
+ To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
9
9
  edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
10
10
  directory (`type: static`) is ONLY for plugging the page as an OWNED static
11
- runtime (async, local edition only); the fast path is `grid_plug`.
11
+ runtime (async, local edition only); the fast path is `grid_deploy`.
12
12
 
13
13
  The fillable HTML is the real template — fetch it with
14
- `grid_fetch("template", "report")` and fill in the user's content.
14
+ `grid_get_template("template", "report")` and fill in the user's content.
15
15
 
16
16
  ## cloudgrid.yaml (reference only)
17
17
 
@@ -115,9 +115,9 @@ You never provision infra or set connection strings by hand. Declare intent in
115
115
  `STRIPE_KEY: stripe-live-key`, `SENDGRID_API_KEY: sendgrid-key`,
116
116
  `AUTH_PROVIDER_KEY: auth-provider-secret`. The platform reads the named item
117
117
  from the org vault and injects it as that env var at runtime. Store the actual
118
- secret value with `grid_secrets` (or the org vault UI) — never commit it. In
118
+ secret value with `grid_set_secret` (or the org vault UI) — never commit it. In
119
119
  code read `process.env.STRIPE_KEY`, `process.env.SENDGRID_API_KEY`, etc. Vault
120
- is the CloudGrid-correct path for third-party keys; `grid_env` is for
120
+ is the CloudGrid-correct path for third-party keys; `grid_set_env` is for
121
121
  non-secret config only.
122
122
 
123
123
  - **AI (optional).** If you add AI (e.g. menu-copy generation, natural-language
@@ -154,7 +154,7 @@ Reserved env var names you must NOT set: `PORT`, `APP_NAME`, `SERVICE_NAME`,
154
154
  provider; leave `/`, `/reserve`, `/api/menu`, `/api/reservations` (POST),
155
155
  `/api/webhooks/stripe` public.
156
156
  3. Initialize the SDK from `process.env.AUTH_PROVIDER_KEY` (+ any public
157
- publishable key via `grid_env`). The public booking flow needs no login.
157
+ publishable key via `grid_set_env`). The public booking flow needs no login.
158
158
 
159
159
  Keep the public reservation POST open; only staff read/mutate endpoints
160
160
  (`GET /api/reservations`, `PATCH/DELETE /api/reservations/[id]`, `/staff/*`) sit
@@ -169,17 +169,17 @@ build is **asynchronous**.
169
169
 
170
170
  1. `grid_login_status` (→ `grid_login` if needed). Pick the grid if the
171
171
  user has more than one.
172
- 2. `grid_init` an app `<name>` — creates the entity + `.cloudgrid/link.json`
172
+ 2. `grid_create_project` an app `<name>` — creates the entity + `.cloudgrid/link.json`
173
173
  and a `cloudgrid.yaml` with empty `services: {}`. Run `init` FIRST (plug needs
174
174
  a linked dir).
175
175
  3. **Fill** — write the app under `services/web/`, then set `cloudgrid.yaml` to
176
176
  this blueprint's active fields: `name`, `services.web { type: nextjs, path: / }`,
177
177
  `needs: { database: true }`, and the `vault:` mappings you actually use.
178
- 4. Store secrets: `grid_secrets` for the vault item values (Stripe/SendGrid/
179
- auth). Non-secret config (publishable keys, feature flags) → `grid_env`.
178
+ 4. Store secrets: `grid_set_secret` for the vault item values (Stripe/SendGrid/
179
+ auth). Non-secret config (publishable keys, feature flags) → `grid_set_env`.
180
180
  5. (Optional) `grid dev` — runs Next.js locally with `DATABASE_MONGODB_URL` and
181
181
  vault vars injected against dev Mongo. Seed `menu`, test a booking.
182
- 6. `grid_plug` — builds + deploys `services/web/`. **Async**: the first
182
+ 6. `grid_deploy` — builds + deploys `services/web/`. **Async**: the first
183
183
  response is `status: building`, not a URL. Poll `grid_status` (or the
184
184
  returned poll URL) until live; surface a liveness signal while it builds
185
185
  (never a bare silent wait). Only then return the **live app URL** (not the
@@ -20,7 +20,7 @@ app under `services/web/` following it — the proven `app-with-data` shape with
20
20
  `MONGODB_URL` fallback — the grid injects it; never hardcode, never commit.
21
21
  3. **Third-party secrets go through the `vault:` block** (Stripe `STRIPE_KEY`,
22
22
  email `SENDGRID_API_KEY`, optional `AUTH_PROVIDER_KEY`) → injected env vars;
23
- store values with `grid_secrets`.
23
+ store values with `grid_set_secret`.
24
24
  4. **Declare `needs: { database: true }`** (canonical) — never mix `needs:` and
25
25
  `requires:`.
26
26
  5. **Cron reminder service is documented but NOT deployable yet** (platform issue
@@ -29,7 +29,7 @@ app under `services/web/` following it — the proven `app-with-data` shape with
29
29
  ## Fetch bundle
30
30
 
31
31
  ```
32
- grid_fetch("template", "restaurant-reservations") # cloudgrid.yaml + AGENTS.md + README
32
+ grid_get_template("template", "restaurant-reservations") # cloudgrid.yaml + AGENTS.md + README
33
33
  ```
34
34
 
35
35
  Then read `AGENTS.md` (file tree, `menu`/`reservations`/`tables` collections,
@@ -3,12 +3,12 @@
3
3
  A single self-contained HTML SaaS marketing site (hero, features, pricing tiers, testimonials, FAQ, and a closing call to action). Richer than the landing-page template.
4
4
 
5
5
  Static inspiration — a single self-contained `index.html` (inline CSS and JS,
6
- no external CDNs). It deploys instantly via `grid_plug` and works on every
6
+ no external CDNs). It deploys instantly via `grid_deploy` and works on every
7
7
  CloudGrid edition, including hosted.
8
8
 
9
9
  ## Fill it in
10
10
 
11
- Fetch the template with `grid_fetch("template", "saas-marketing")`, then replace the
11
+ Fetch the template with `grid_get_template("template", "saas-marketing")`, then replace the
12
12
  placeholders:
13
13
 
14
14
  - The product name, tagline, and hero eyebrow/headline/subheadline.
@@ -5,13 +5,13 @@ State (if any) lives only in memory and is lost on refresh.
5
5
 
6
6
  ## How it deploys
7
7
 
8
- To publish this page, use **`grid_plug`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
8
+ To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
9
9
  edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
10
10
  directory (`type: static`) is ONLY for plugging the page as an OWNED static
11
- runtime (async, local edition only); the fast path is `grid_plug`.
11
+ runtime (async, local edition only); the fast path is `grid_deploy`.
12
12
 
13
13
  The fillable HTML is the real template — fetch it with
14
- `grid_fetch("template", "saas-marketing")` and fill in the user's content.
14
+ `grid_get_template("template", "saas-marketing")` and fill in the user's content.
15
15
 
16
16
  ## cloudgrid.yaml (reference only)
17
17
 
@@ -3,12 +3,12 @@
3
3
  A single self-contained HTML service status page: an overall banner, a component list with up / degraded / down pills, per-component uptime bars, and an incident history log. Status is baked into the page.
4
4
 
5
5
  Static inspiration — a single self-contained `index.html` (inline CSS and JS,
6
- no external CDNs). It deploys instantly via `grid_plug` and works on every
6
+ no external CDNs). It deploys instantly via `grid_deploy` and works on every
7
7
  CloudGrid edition, including hosted.
8
8
 
9
9
  ## Fill it in
10
10
 
11
- Fetch the template with `grid_fetch("template", "status-page")`, then replace the
11
+ Fetch the template with `grid_get_template("template", "status-page")`, then replace the
12
12
  placeholders:
13
13
 
14
14
  - The overall status banner text and state class (`ok` / `degraded` / `down`).
@@ -5,13 +5,13 @@ State (if any) lives only in memory and is lost on refresh.
5
5
 
6
6
  ## How it deploys
7
7
 
8
- To publish this page, use **`grid_plug`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
8
+ To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
9
9
  edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
10
10
  directory (`type: static`) is ONLY for plugging the page as an OWNED static
11
- runtime (async, local edition only); the fast path is `grid_plug`.
11
+ runtime (async, local edition only); the fast path is `grid_deploy`.
12
12
 
13
13
  The fillable HTML is the real template — fetch it with
14
- `grid_fetch("template", "status-page")` and fill in the user's content.
14
+ `grid_get_template("template", "status-page")` and fill in the user's content.
15
15
 
16
16
  ## cloudgrid.yaml (reference only)
17
17
 
@@ -18,7 +18,7 @@ The two share the same Stripe + Mongo wiring.
18
18
  The proven persistent shape is `app-with-data` (Next.js + Mongo). This blueprint
19
19
  extends it with Stripe subscriptions + the Billing Portal. Fetch that template
20
20
  for the Mongo lazy-client and App-Router API pattern:
21
- `grid_fetch("template", "app-with-data")`.
21
+ `grid_get_template("template", "app-with-data")`.
22
22
 
23
23
  ## 1. File tree
24
24
 
@@ -89,7 +89,7 @@ client for plan/status — read this (kept current by the webhook).
89
89
  STRIPE_KEY: stripe-live-key
90
90
  STRIPE_WEBHOOK_SECRET: stripe-webhook-secret
91
91
  ```
92
- Set the vault items ONCE with `grid_secrets` (or `grid secrets set`), then
92
+ Set the vault items ONCE with `grid_set_secret` (or `grid secrets set`), then
93
93
  the deployer injects each as the named env var (`process.env.STRIPE_KEY`, etc.)
94
94
  at runtime and under `grid dev`. Do NOT commit keys; do NOT set them in
95
95
  `services.web.env` (that block is for non-secret config only). Read them lazily
@@ -160,19 +160,19 @@ known user — otherwise anyone could change anyone's plan.
160
160
 
161
161
  1. `grid_login_status` → `grid_login` if needed. Respect the grid picker
162
162
  (ask which grid if the user has more than one).
163
- 2. `grid_init` an app `<name>` FIRST — it creates the entity, writes
163
+ 2. `grid_create_project` an app `<name>` FIRST — it creates the entity, writes
164
164
  `.cloudgrid/link.json`, and a `cloudgrid.yaml` with empty `services: {}`.
165
165
  `plug` needs a linked directory.
166
166
  3. Write the app under `services/web/` and set `cloudgrid.yaml` to the active
167
167
  shape: `name` + `services.web{type: nextjs, path: /}` + `needs:{database:true}`
168
168
  + the `vault:` block.
169
- 4. Set the secrets: `grid_secrets` for `stripe-live-key`,
169
+ 4. Set the secrets: `grid_set_secret` for `stripe-live-key`,
170
170
  `stripe-webhook-secret` (and `auth-provider-key` if you use an auth SDK) — the
171
171
  vault item keys the `vault:` block maps from. Non-secret config (Stripe
172
- publishable key, price ids, auth publishable key) → `grid_env` /
172
+ publishable key, price ids, auth publishable key) → `grid_set_env` /
173
173
  `services.web.env`. Do NOT set `DATABASE_MONGODB_URL` yourself — the grid
174
174
  injects it.
175
- 5. `grid_plug` to deploy. A runtime deploy is **ASYNC** — the first response
175
+ 5. `grid_deploy` to deploy. A runtime deploy is **ASYNC** — the first response
176
176
  is `status: building`, not a live URL. Poll `grid_status` (or the returned
177
177
  poll_url) until live; surface a liveness signal while it builds, never a bare
178
178
  silent wait.
@@ -187,5 +187,5 @@ A subscription-management app is a built + deployed runtime container, so it
187
187
  requires the **local edition** (Claude Desktop / Claude Code) or the CLI. The
188
188
  **hosted** edition (Claude Web / hosted MCP) is inline-only and can only publish
189
189
  static pages — it CANNOT build this app. On hosted, say so plainly and offer a
190
- static pricing/plans page (via `grid_plug`) instead, then stop the runtime
190
+ static pricing/plans page (via `grid_deploy`) instead, then stop the runtime
191
191
  path.
@@ -15,8 +15,8 @@ flow, use the `membership-site` blueprint — the two share the same Stripe + Mo
15
15
  wiring.
16
16
 
17
17
  **Fetch the bundle:**
18
- - `grid_fetch("template", "subscription-management")` — this blueprint (`cloudgrid.yaml` + `AGENTS.md`).
19
- - `grid_fetch("template", "app-with-data")` — the proven Next.js + Mongo shape to extend (lazy db client, App-Router API).
18
+ - `grid_get_template("template", "subscription-management")` — this blueprint (`cloudgrid.yaml` + `AGENTS.md`).
19
+ - `grid_get_template("template", "app-with-data")` — the proven Next.js + Mongo shape to extend (lazy db client, App-Router API).
20
20
 
21
21
  **Key rules:**
22
22
 
@@ -30,7 +30,7 @@ wiring.
30
30
  `DATABASE_MONGODB_URL` (legacy `MONGODB_URL` fallback). Read it LAZILY inside
31
31
  the getter, never at module top level (top-level read fails `next build`).
32
32
  4. **Secrets via the `vault:` block** → env vars. `STRIPE_KEY` and
33
- `STRIPE_WEBHOOK_SECRET` map to vault items; set them with `grid_secrets`,
33
+ `STRIPE_WEBHOOK_SECRET` map to vault items; set them with `grid_set_secret`,
34
34
  and the deployer injects them at runtime. Read lazily; do not commit keys or
35
35
  put secrets in `services.web.env` (publishable key + price ids go there).
36
36
  5. **The webhook is the source of truth.** Change-plan / cancel APIs call Stripe;
@@ -66,8 +66,8 @@ vault:
66
66
 
67
67
  ## Deploy (async, local edition)
68
68
 
69
- `grid_init` first (creates the entity + link.json), write the app under
70
- `services/web/`, set the vault secrets with `grid_secrets`, `grid_plug`
69
+ `grid_create_project` first (creates the entity + link.json), write the app under
70
+ `services/web/`, set the vault secrets with `grid_set_secret`, `grid_deploy`
71
71
  (async — poll `grid_status` to a live URL), then register the `/api/webhook`
72
72
  URL in Stripe, configure the Billing Portal, and re-plug. Re-plug the same entity
73
73
  to update the same URL.
@@ -3,12 +3,12 @@
3
3
  A single self-contained HTML launch waitlist / coming-soon page: a hero, an email capture form, and a social-proof counter.
4
4
 
5
5
  Static inspiration — a single self-contained `index.html` (inline CSS and JS,
6
- no external CDNs). It deploys instantly via `grid_plug` and works on every
6
+ no external CDNs). It deploys instantly via `grid_deploy` and works on every
7
7
  CloudGrid edition, including hosted.
8
8
 
9
9
  ## Fill it in
10
10
 
11
- Fetch the template with `grid_fetch("template", "waitlist")`, then replace the
11
+ Fetch the template with `grid_get_template("template", "waitlist")`, then replace the
12
12
  placeholders:
13
13
 
14
14
  - The product name, coming-soon headline, and subheadline.
@@ -5,13 +5,13 @@ State (if any) lives only in memory and is lost on refresh.
5
5
 
6
6
  ## How it deploys
7
7
 
8
- To publish this page, use **`grid_plug`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
8
+ To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
9
9
  edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
10
10
  directory (`type: static`) is ONLY for plugging the page as an OWNED static
11
- runtime (async, local edition only); the fast path is `grid_plug`.
11
+ runtime (async, local edition only); the fast path is `grid_deploy`.
12
12
 
13
13
  The fillable HTML is the real template — fetch it with
14
- `grid_fetch("template", "waitlist")` and fill in the user's content.
14
+ `grid_get_template("template", "waitlist")` and fill in the user's content.
15
15
 
16
16
  ## Note on storing signups
17
17
 
@@ -16,7 +16,7 @@
16
16
  # THIS TEMPLATE (web-app): a single self-contained static page. The active fields
17
17
  # are exactly name + services.web{type: static, path: /}; there are no needs.
18
18
  # This cloudgrid.yaml is the reference for plugging it as an OWNED static
19
- # runtime; the fast path is to deploy it as an INSPIRATION via grid_plug
19
+ # runtime; the fast path is to deploy it as an INSPIRATION via grid_deploy
20
20
  # (instant, and works on the hosted edition too).
21
21
  # ============================================================================
22
22
 
@@ -5,13 +5,13 @@ no `needs:`. State (if any) lives only in memory and is lost on refresh.
5
5
 
6
6
  ## How it deploys
7
7
 
8
- To publish this page, use **`grid_plug`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
8
+ To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
9
9
  edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
10
10
  directory (`type: static`) is ONLY for plugging the page as an OWNED static
11
- runtime (async, local edition only); the fast path is `grid_plug`.
11
+ runtime (async, local edition only); the fast path is `grid_deploy`.
12
12
 
13
13
  The fillable HTML is the real template — fetch it with
14
- `grid_fetch("template", "web-app")` and fill in the user's content.
14
+ `grid_get_template("template", "web-app")` and fill in the user's content.
15
15
 
16
16
  ## cloudgrid.yaml (reference only)
17
17
 
@@ -45,7 +45,7 @@ npx skills add cloudgrid-io/skills
45
45
  ```
46
46
  claude mcp add cloudgrid -- npx -y @cloudgrid-io/mcp
47
47
  ```
48
- - **Find it under `/mcp`.** Exposes tools `grid_plug`, `grid_login`, …
48
+ - **Find it under `/mcp`.** Exposes tools `grid_deploy`, `grid_login`, …
49
49
  - Invoke by describing the task; the model calls the tool.
50
50
 
51
51
  > Where did my install go? `/skills` (skills), `/plugin` (plugin), `/mcp` (MCP).
@@ -39,7 +39,7 @@ edition** (Claude Desktop / Claude Code) or the CLI.
39
39
 
40
40
  ## 3. Scaffold
41
41
 
42
- `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
42
+ `grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
43
43
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
44
44
  directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
45
45
  and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
@@ -64,7 +64,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
64
64
  author new yaml with it, and never set `needs:` and `requires:` together (the
65
65
  validator rejects it).
66
66
  2. Fetch the template for the Mongo wiring + CRUD shape:
67
- `grid_fetch("template", "admin-dashboard")`. It is a minimal, real Next.js
67
+ `grid_get_template("template", "admin-dashboard")`. It is a minimal, real Next.js
68
68
  + `mongodb`-driver admin panel under `services/web/`: a lazy client in
69
69
  `services/web/lib/db.js`, two App-Router GET/POST/DELETE routes (`users` and
70
70
  `orders`), a server-component page that computes a metrics header, and a
@@ -83,13 +83,13 @@ before deploying. Don't require it.
83
83
 
84
84
  ## 6. Config
85
85
 
86
- - API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
86
+ - API keys / secrets → `grid_set_secret`. Non-secret config → `grid_set_env`.
87
87
  - Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
88
88
  legacy `MONGODB_URL`) — the grid injects them.
89
89
 
90
90
  ## 7. Deploy (async)
91
91
 
92
- Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
92
+ Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
93
93
  response is `status: "building"`, NOT a live URL yet.
94
94
  - Poll `grid_status` (or the returned poll_url) until the entity is live.
95
95
  - Surface a liveness signal while it builds — never a bare silent wait.
@@ -41,7 +41,7 @@ Persistent apps are owned entities.
41
41
 
42
42
  ## 3. Scaffold
43
43
 
44
- `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
44
+ `grid_create_project` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
45
45
  and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
46
46
  directory, so run `init` FIRST.
47
47
 
@@ -75,7 +75,7 @@ ai: true, database: true }`).
75
75
  yaml with it, and never set `needs:` and `requires:` together (the validator
76
76
  rejects it).
77
77
  2. Fetch the template for the chat wiring:
78
- `grid_fetch("template", "ai-app")`. It is a minimal Next.js App Router chat
78
+ `grid_get_template("template", "ai-app")`. It is a minimal Next.js App Router chat
79
79
  app under `services/web/`: a chat page, an API route
80
80
  (`app/api/chat/route.js`, `export const dynamic = "force-dynamic"`) that reads
81
81
  the user message, calls the AI gateway, persists the exchange to Mongo, and
@@ -95,7 +95,7 @@ ai: true, database: true }`).
95
95
  imported for route analysis before the grid injects the var). Store the user
96
96
  message and the assistant reply so the conversation survives refresh. Never
97
97
  hardcode a connection string; never commit a secret.
98
- - (Optional) fetch `grid_fetch("example", "ai-app")` for a richer filled
98
+ - (Optional) fetch `grid_get_template("example", "ai-app")` for a richer filled
99
99
  reference (a themed assistant) to imitate.
100
100
 
101
101
  ## 5. (Optional) Run locally
@@ -105,15 +105,15 @@ are wired in dev too — and send a test message before deploying. Don't require
105
105
 
106
106
  ## 6. Config
107
107
 
108
- - Extra API keys / secrets (only if the app needs its own) → `grid_secrets`.
109
- - Non-secret config → `grid_env`.
108
+ - Extra API keys / secrets (only if the app needs its own) → `grid_set_secret`.
109
+ - Non-secret config → `grid_set_env`.
110
110
  - Do **NOT** set the DB connection var yourself (`DATABASE_MONGODB_URL` / legacy
111
111
  `MONGODB_URL`) and do **NOT** set an AI key — the grid injects the DB var and
112
112
  the AI SDK auto-detects the in-grid identity.
113
113
 
114
114
  ## 7. Deploy (async)
115
115
 
116
- Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
116
+ Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
117
117
  response is `status: "building"` with a `poll_url` / entity, NOT a live URL yet.
118
118
  - Poll `grid_status` (or the returned poll_url) until the entity is live.
119
119
  - Surface a liveness signal while it builds — never a bare silent wait.
@@ -50,7 +50,7 @@ CLI.
50
50
 
51
51
  ## 3. Fetch the blueprint and READ AGENTS.md
52
52
 
53
- `grid_fetch("template", "ai-knowledge-base")`. The deliverable is the
53
+ `grid_get_template("template", "ai-knowledge-base")`. The deliverable is the
54
54
  **`AGENTS.md` structure guide** — read it before writing anything. It defines:
55
55
  - the `services/web/` file tree (pages, `api/documents` + `api/ask` routes, `lib/`),
56
56
  - the Mongo collections (`documents`, `chunks`) + fields,
@@ -64,7 +64,7 @@ There is no app code to copy — you generate it from the guide.
64
64
 
65
65
  ## 4. Scaffold + fill cloudgrid.yaml
66
66
 
67
- `grid_init` an app `<name>` FIRST (creates the entity + `.cloudgrid/link.json`
67
+ `grid_create_project` an app `<name>` FIRST (creates the entity + `.cloudgrid/link.json`
68
68
  and a starter `cloudgrid.yaml` with empty `services:{}`; `plug` needs a linked
69
69
  directory). Then put the app under **`services/web/`** and set `cloudgrid.yaml` to
70
70
  the blueprint's active fields:
@@ -112,7 +112,7 @@ Generate the files under `services/web/` per the guide:
112
112
  yourself; the grid injects them.
113
113
  - Only if you add auth/payments: map the secret in the `vault:` block
114
114
  (`AUTH_PROVIDER_KEY` and/or `STRIPE_KEY`) and store the value with
115
- `grid secrets set <vault-item-key> …`. Non-secret public config → `grid_env`.
115
+ `grid secrets set <vault-item-key> …`. Non-secret public config → `grid_set_env`.
116
116
 
117
117
  ## 7. (Optional) Run locally
118
118
 
@@ -121,7 +121,7 @@ Gateway before deploying. Don't require it.
121
121
 
122
122
  ## 8. Deploy (async)
123
123
 
124
- Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
124
+ Deploy the folder with `grid_deploy`. A **runtime deploy is ASYNC**: the first
125
125
  response is `status: "building"`, NOT a live URL yet.
126
126
  - Poll `grid_status` (or the returned poll_url) until the entity is live.
127
127
  - Surface a liveness signal while it builds — never a bare silent wait.