@cloudgrid-io/mcp 0.20.3 → 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.
- package/package.json +4 -2
- package/src/corpus/capability-map.md +8 -8
- package/src/corpus/cloudgrid-yaml.md +5 -5
- package/src/corpus/cookbook.md +1 -1
- package/src/corpus/skill-claim.md +1 -1
- package/src/corpus/skill-plug.md +1 -1
- package/src/corpus/skills-readme.md +1 -1
- package/src/corpus/templates/ai-knowledge-base/AGENTS.md +1 -1
- package/src/corpus/templates/ai-knowledge-base/index.md +1 -1
- package/src/corpus/templates/api-docs/README.md +2 -2
- package/src/corpus/templates/api-docs/index.md +3 -3
- package/src/corpus/templates/appointment-booking/AGENTS.md +7 -7
- package/src/corpus/templates/appointment-booking/index.md +5 -5
- package/src/corpus/templates/approval-workflow/AGENTS.md +2 -2
- package/src/corpus/templates/approval-workflow/index.md +2 -2
- package/src/corpus/templates/billing-dashboard/index.md +1 -1
- package/src/corpus/templates/calendar-scheduler/AGENTS.md +1 -1
- package/src/corpus/templates/calendar-scheduler/index.md +1 -1
- package/src/corpus/templates/changelog/README.md +2 -2
- package/src/corpus/templates/changelog/index.md +3 -3
- package/src/corpus/templates/company-website/README.md +3 -3
- package/src/corpus/templates/company-website/cloudgrid.yaml +1 -1
- package/src/corpus/templates/company-website/index.md +3 -3
- package/src/corpus/templates/course-platform/index.md +1 -1
- package/src/corpus/templates/dashboard/cloudgrid.yaml +1 -1
- package/src/corpus/templates/dashboard/index.md +3 -3
- package/src/corpus/templates/deck/cloudgrid.yaml +1 -1
- package/src/corpus/templates/deck/index.md +3 -3
- package/src/corpus/templates/docs-site/README.md +2 -2
- package/src/corpus/templates/docs-site/index.md +3 -3
- package/src/corpus/templates/forum/AGENTS.md +4 -4
- package/src/corpus/templates/forum/index.md +1 -1
- package/src/corpus/templates/hr-portal/index.md +1 -1
- package/src/corpus/templates/internal-tools-portal/index.md +1 -1
- package/src/corpus/templates/landing-page/cloudgrid.yaml +1 -1
- package/src/corpus/templates/landing-page/index.md +3 -3
- package/src/corpus/templates/lms/index.md +1 -1
- package/src/corpus/templates/marketplace/AGENTS.md +1 -1
- package/src/corpus/templates/marketplace/index.md +1 -1
- package/src/corpus/templates/membership-site/AGENTS.md +7 -7
- package/src/corpus/templates/membership-site/index.md +5 -5
- package/src/corpus/templates/online-store/index.md +1 -1
- package/src/corpus/templates/portfolio/README.md +2 -2
- package/src/corpus/templates/portfolio/index.md +3 -3
- package/src/corpus/templates/product-launch/README.md +3 -3
- package/src/corpus/templates/product-launch/cloudgrid.yaml +1 -1
- package/src/corpus/templates/product-launch/index.md +3 -3
- package/src/corpus/templates/report/cloudgrid.yaml +1 -1
- package/src/corpus/templates/report/index.md +3 -3
- package/src/corpus/templates/restaurant-reservations/AGENTS.md +7 -7
- package/src/corpus/templates/restaurant-reservations/index.md +2 -2
- package/src/corpus/templates/saas-marketing/README.md +2 -2
- package/src/corpus/templates/saas-marketing/index.md +3 -3
- package/src/corpus/templates/status-page/README.md +2 -2
- package/src/corpus/templates/status-page/index.md +3 -3
- package/src/corpus/templates/subscription-management/AGENTS.md +7 -7
- package/src/corpus/templates/subscription-management/index.md +5 -5
- package/src/corpus/templates/waitlist/README.md +2 -2
- package/src/corpus/templates/waitlist/index.md +3 -3
- package/src/corpus/templates/web-app/cloudgrid.yaml +1 -1
- package/src/corpus/templates/web-app/index.md +3 -3
- package/src/corpus/usage.md +1 -1
- package/src/corpus/workflows/admin-dashboard.md +4 -4
- package/src/corpus/workflows/ai-app.md +6 -6
- package/src/corpus/workflows/ai-knowledge-base.md +4 -4
- package/src/corpus/workflows/analytics-dashboard.md +4 -4
- package/src/corpus/workflows/api-dashboard.md +4 -4
- package/src/corpus/workflows/api-docs.md +2 -2
- package/src/corpus/workflows/api-service.md +6 -6
- package/src/corpus/workflows/app-with-data.md +6 -6
- package/src/corpus/workflows/appointment-booking.md +6 -6
- package/src/corpus/workflows/approval-workflow.md +4 -4
- package/src/corpus/workflows/billing-dashboard.md +6 -6
- package/src/corpus/workflows/blog-cms.md +4 -4
- package/src/corpus/workflows/booking-system.md +5 -5
- package/src/corpus/workflows/calendar-scheduler.md +4 -4
- package/src/corpus/workflows/changelog.md +2 -2
- package/src/corpus/workflows/company-website.md +3 -3
- package/src/corpus/workflows/course-platform.md +5 -5
- package/src/corpus/workflows/crm.md +5 -5
- package/src/corpus/workflows/dashboard.md +3 -3
- package/src/corpus/workflows/directory.md +4 -4
- package/src/corpus/workflows/docs-app.md +6 -6
- package/src/corpus/workflows/docs-site.md +2 -2
- package/src/corpus/workflows/erp.md +5 -5
- package/src/corpus/workflows/event-board.md +4 -4
- package/src/corpus/workflows/expense-tracker.md +4 -4
- package/src/corpus/workflows/feature-request-board.md +4 -4
- package/src/corpus/workflows/financial-dashboard.md +4 -4
- package/src/corpus/workflows/forum.md +5 -5
- package/src/corpus/workflows/hr-portal.md +5 -5
- package/src/corpus/workflows/internal-tools-portal.md +5 -5
- package/src/corpus/workflows/inventory.md +4 -4
- package/src/corpus/workflows/invoice.md +4 -4
- package/src/corpus/workflows/job-board.md +4 -4
- package/src/corpus/workflows/kanban.md +5 -5
- package/src/corpus/workflows/landing-page.md +3 -3
- package/src/corpus/workflows/lms.md +5 -5
- package/src/corpus/workflows/marketplace.md +4 -4
- package/src/corpus/workflows/membership-site.md +6 -6
- package/src/corpus/workflows/monitoring-dashboard.md +4 -4
- package/src/corpus/workflows/online-store.md +6 -6
- package/src/corpus/workflows/portfolio.md +2 -2
- package/src/corpus/workflows/presentation.md +3 -3
- package/src/corpus/workflows/product-catalog.md +4 -4
- package/src/corpus/workflows/product-launch.md +3 -3
- package/src/corpus/workflows/project-management.md +4 -4
- package/src/corpus/workflows/property-listings.md +4 -4
- package/src/corpus/workflows/quiz-platform.md +4 -4
- package/src/corpus/workflows/report.md +3 -3
- package/src/corpus/workflows/restaurant-reservations.md +5 -5
- package/src/corpus/workflows/revenue-dashboard.md +4 -4
- package/src/corpus/workflows/saas-marketing.md +2 -2
- package/src/corpus/workflows/semantic-search.md +5 -5
- package/src/corpus/workflows/status-page.md +2 -2
- package/src/corpus/workflows/subscription-management.md +6 -6
- package/src/corpus/workflows/task-manager.md +4 -4
- package/src/corpus/workflows/ticket-system.md +4 -4
- package/src/corpus/workflows/time-tracking.md +4 -4
- package/src/corpus/workflows/travel-booking.md +5 -5
- package/src/corpus/workflows/waitlist.md +2 -2
- package/src/corpus/workflows/web-app.md +3 -3
- package/src/session-logger.js +3 -3
- package/src/tools.js +228 -87
- package/src/widgets/org-picker.html +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudgrid-io/mcp",
|
|
3
|
-
"version": "0.20.
|
|
4
|
-
"description": "MCP
|
|
3
|
+
"version": "0.20.5",
|
|
4
|
+
"description": "Use CloudGrid via MCP to brainstorm, build, deploy, and improve apps, games, websites, dashboards, and tools and get a live URL - templates, recipes, managed databases and AI, instant single-page publish, and full-app deploys, for developers and non-technical users. Three editions: local stdio (full toolset), hosted web (light, CLI-free), and a public docs-search server, over MCP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"cloudgrid-mcp": "src/index.js"
|
|
@@ -27,6 +27,8 @@
|
|
|
27
27
|
"test:content": "node test/content-handling.test.mjs",
|
|
28
28
|
"test:self-healing": "node test/self-healing.test.mjs",
|
|
29
29
|
"test:grid-picker": "node test/grid-picker.test.mjs",
|
|
30
|
+
"test:plug-timeout": "node test/plug-timeout.test.mjs",
|
|
31
|
+
"test:manifest-confirm": "node test/manifest-confirm.test.mjs",
|
|
30
32
|
"test:drift-guard": "node test/drift-guard.mjs",
|
|
31
33
|
"smoke:drop": "node test/smoke-drop.mjs",
|
|
32
34
|
"smoke:login": "node test/smoke-login.mjs",
|
|
@@ -4,19 +4,19 @@ This is the index an LLM uses to turn a user request into the right CloudGrid
|
|
|
4
4
|
template, the way Superpowers matches a skill's `when:`. Match the request to a
|
|
5
5
|
template by its `when:` triggers, adopt that template's `needs:`, then deploy:
|
|
6
6
|
|
|
7
|
-
> **One deploy verb: `
|
|
7
|
+
> **One deploy verb: `grid_deploy`.** Classify the artifact to pick the shape —
|
|
8
8
|
> ONE self-contained HTML page (CSS+JS inline, images/fonts as data: URIs) →
|
|
9
9
|
> **inspiration**; separate files/folders/assets or any `needs:` → **runtime app**.
|
|
10
10
|
|
|
11
11
|
- **single self-contained HTML page → inspiration** (instant, any client / any
|
|
12
|
-
edition) via `
|
|
12
|
+
edition) via `grid_deploy` with the inline `html` param.
|
|
13
13
|
- **separate files/folders/assets, or anything needing `needs:` → runtime app**
|
|
14
|
-
(async build, **local edition** only) via `
|
|
14
|
+
(async build, **local edition** only) via `grid_deploy` on a linked folder.
|
|
15
15
|
|
|
16
|
-
Fetch this doc any time with `
|
|
16
|
+
Fetch this doc any time with `grid_get_template("doc", "capability-map")`. For the full
|
|
17
17
|
cloudgrid.yaml schema (every field, the `needs:` injection table, the
|
|
18
18
|
requires-vs-needs caveat, validation rules), fetch the companion reference:
|
|
19
|
-
`
|
|
19
|
+
`grid_get_template("doc", "cloudgrid-yaml")`.
|
|
20
20
|
|
|
21
21
|
## The 60 templates
|
|
22
22
|
|
|
@@ -143,7 +143,7 @@ chunks in Mongo and cosine-rank in-app until it lands.
|
|
|
143
143
|
`needs:` is a MAP declaring infrastructure capabilities. Values are `true` or an
|
|
144
144
|
engine hint. Cron is NOT a need — it is a **service type** (`type: cron` with
|
|
145
145
|
`schedule` + `timezone`). See the full cloudgrid.yaml reference §5–§6 via
|
|
146
|
-
`
|
|
146
|
+
`grid_get_template("doc", "cloudgrid-yaml")`.
|
|
147
147
|
|
|
148
148
|
| `needs:` key | Provides | Injected env var(s) | Status |
|
|
149
149
|
|---|---|---|---|
|
|
@@ -180,9 +180,9 @@ engine hint. Cron is NOT a need — it is a **service type** (`type: cron` with
|
|
|
180
180
|
work → a `type: cron` service (Python/Node, supported on 0.14.0). (Held for now:
|
|
181
181
|
RAG's ideal `vector: pgvector`, #1545 — store embeddings in Mongo until it lands.)
|
|
182
182
|
3. One self-contained HTML page (`needs: none`, assets inlined) → publish as an
|
|
183
|
-
inspiration with `
|
|
183
|
+
inspiration with `grid_deploy` and the inline `html` param (instant, any
|
|
184
184
|
edition). Separate files/folders/assets, or anything with a `needs:` →
|
|
185
|
-
runtime, local edition, `
|
|
185
|
+
runtime, local edition, `grid_deploy` a linked folder, then poll to a live URL.
|
|
186
186
|
|
|
187
187
|
## FAQ
|
|
188
188
|
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
> of that reference — practically complete, not a verbatim dump. **Keep in sync**
|
|
6
6
|
> with the upstream: when the platform reference changes, update this doc.
|
|
7
7
|
>
|
|
8
|
-
> Fetch this doc any time with `
|
|
8
|
+
> Fetch this doc any time with `grid_get_template("doc", "cloudgrid-yaml")`.
|
|
9
9
|
> For matching an intent to a template, see the companion
|
|
10
|
-
> `
|
|
10
|
+
> `grid_get_template("doc", "capability-map")`.
|
|
11
11
|
|
|
12
12
|
`cloudgrid.yaml` is the manifest at the **root of your project** that defines your
|
|
13
13
|
entity (an app or an agent). It declares the services your entity runs, the
|
|
@@ -28,7 +28,7 @@ These are the shapes verified against live deploys. Copy one and adapt it.
|
|
|
28
28
|
### Single HTML page → deploys as an inspiration (instant)
|
|
29
29
|
|
|
30
30
|
One self-contained HTML page (CSS+JS inline, images/fonts as data: URIs). No
|
|
31
|
-
`needs:`. Publishes instantly via `
|
|
31
|
+
`needs:`. Publishes instantly via `grid_deploy` with the inline `html` param,
|
|
32
32
|
works on any edition (hosted or local).
|
|
33
33
|
|
|
34
34
|
```yaml
|
|
@@ -541,7 +541,7 @@ Bake these into any yaml you author:
|
|
|
541
541
|
it**; use `needs:` instead.
|
|
542
542
|
- **`needs:` and `requires:` together are HARD-REJECTED** by the validator ("use
|
|
543
543
|
one or the other"). So author **`needs:`-only** — never set both.
|
|
544
|
-
- **A single self-contained HTML page deploys as an inspiration** via `
|
|
544
|
+
- **A single self-contained HTML page deploys as an inspiration** via `grid_deploy`
|
|
545
545
|
with the inline `html` param — instant, synchronous, works on the hosted edition
|
|
546
546
|
and any client.
|
|
547
547
|
- **A `cloudgrid.yaml` with `services:` makes it a runtime** — async build,
|
|
@@ -567,5 +567,5 @@ needs:
|
|
|
567
567
|
---
|
|
568
568
|
|
|
569
569
|
*This doc is the agent-facing distribution of the platform's canonical
|
|
570
|
-
`cloudgrid-yaml-reference.md`. See also `
|
|
570
|
+
`cloudgrid-yaml-reference.md`. See also `grid_get_template("doc", "capability-map")`
|
|
571
571
|
for matching a user intent to a template + the `needs:` injection status.*
|
package/src/corpus/cookbook.md
CHANGED
|
@@ -74,7 +74,7 @@ curl -sS -X POST https://api.cloudgrid.io/api/v2/plug \
|
|
|
74
74
|
The response includes `url` (the live link — use it verbatim), `entity_id`,
|
|
75
75
|
`owner_token` (keep both to update the page later), and `claim_url` (sign in
|
|
76
76
|
before it expires to keep it). This is what the `cloudgrid:plug` skill and the
|
|
77
|
-
`
|
|
77
|
+
`grid_deploy` MCP tool (inline `html` param) do for you. It is anonymous and serves
|
|
78
78
|
inspirations only; a full app needs the signed-in `plug` flow above.
|
|
79
79
|
|
|
80
80
|
## Update your drop in place
|
|
@@ -69,5 +69,5 @@ new_expires_at, role_granted: "owner", ... }`.
|
|
|
69
69
|
## Notes
|
|
70
70
|
|
|
71
71
|
- One pickup claims one entity. To claim several, repeat with each entity id + token.
|
|
72
|
-
- The MCP `
|
|
72
|
+
- The MCP `grid_claim_anonymous_deploy` tool does this for you, and remembers the entity id +
|
|
73
73
|
token from the last anonymous drop so you can claim with no arguments.
|
package/src/corpus/skill-plug.md
CHANGED
|
@@ -58,7 +58,7 @@ curl -sS -X POST https://api.cloudgrid.io/api/v2/plug \
|
|
|
58
58
|
-F "artifact=@/path/to/index.html;type=text/html"
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
The MCP `
|
|
61
|
+
The MCP `grid_deploy` tool does all of this for you: pass the page as its inline
|
|
62
62
|
`html` param (it materializes one `index.html` and handles anon/claim/re-plug).
|
|
63
63
|
|
|
64
64
|
### Re-plug: update the same URL in place
|
|
@@ -33,7 +33,7 @@ behalf: scaffold, deploy, tail logs, share, read feedback. Everything here is fr
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
One install wires up everything: the skills, the SessionStart orientation
|
|
36
|
-
hook, and the CloudGrid MCP server (`grid_start`, `
|
|
36
|
+
hook, and the CloudGrid MCP server (`grid_start`, `grid_get_template`, and the
|
|
37
37
|
CLI-wrapping tools). The MCP auto-starts when the plugin is enabled — no
|
|
38
38
|
separate `claude mcp add` needed.
|
|
39
39
|
|
|
@@ -208,7 +208,7 @@ Runtime app → **local edition** only (Claude Desktop / Claude Code / CLI); the
|
|
|
208
208
|
hosted edition cannot build a runtime container. Order matters — `plug` needs a
|
|
209
209
|
linked directory, so `init` first.
|
|
210
210
|
|
|
211
|
-
1. `grid init` (or `
|
|
211
|
+
1. `grid init` (or `grid_create_project`) an app `<name>` — creates the entity +
|
|
212
212
|
`.cloudgrid/link.json` and a starter `cloudgrid.yaml` with empty `services:{}`.
|
|
213
213
|
2. Fill: put the app under `services/web/` and set `cloudgrid.yaml` to this
|
|
214
214
|
blueprint's active fields (`services.web` nextjs `/`, `needs:{ai:true,
|
|
@@ -11,7 +11,7 @@ the app following it.
|
|
|
11
11
|
`AGENTS.md`. Fetch the bundle, read `AGENTS.md`, then generate the files under
|
|
12
12
|
`services/web/` and deploy.
|
|
13
13
|
|
|
14
|
-
- **Structure guide:** `
|
|
14
|
+
- **Structure guide:** `grid_get_template("template", "ai-knowledge-base")` → read
|
|
15
15
|
**`AGENTS.md`** (file tree, Mongo collections, CloudGrid injection table, the
|
|
16
16
|
RAG loop, the pgvector #1545 note, optional auth/payments, deploy steps).
|
|
17
17
|
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
A single self-contained HTML API reference: a sidebar endpoint list, per-endpoint method badges (GET / POST / PUT / DELETE), a params table, and request / response examples in code blocks.
|
|
4
4
|
|
|
5
5
|
Static inspiration — a single self-contained `index.html` (inline CSS and JS,
|
|
6
|
-
no external CDNs). It deploys instantly via `
|
|
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 `
|
|
11
|
+
Fetch the template with `grid_get_template("template", "api-docs")`, then replace the
|
|
12
12
|
placeholders:
|
|
13
13
|
|
|
14
14
|
- The API name, base URL, and auth note.
|
|
@@ -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 **`
|
|
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 `
|
|
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
|
-
`
|
|
14
|
+
`grid_get_template("template", "api-docs")` and fill in the user's content.
|
|
15
15
|
|
|
16
16
|
## cloudgrid.yaml (reference only)
|
|
17
17
|
|
|
@@ -12,7 +12,7 @@ what make it deploy.
|
|
|
12
12
|
The proven persistent shape is `app-with-data` (Next.js + Mongo). This blueprint
|
|
13
13
|
extends it with auth, availability/slot logic, and optional Stripe deposits.
|
|
14
14
|
Fetch that template for the Mongo lazy-client and App-Router API pattern:
|
|
15
|
-
`
|
|
15
|
+
`grid_get_template("template", "app-with-data")`.
|
|
16
16
|
|
|
17
17
|
## 1. File tree
|
|
18
18
|
|
|
@@ -102,7 +102,7 @@ clients racing for the same slot cannot both win.
|
|
|
102
102
|
STRIPE_KEY: stripe-live-key # only if you take deposits
|
|
103
103
|
STRIPE_WEBHOOK_SECRET: stripe-webhook-secret # only if you take deposits
|
|
104
104
|
```
|
|
105
|
-
Set the vault items ONCE with `
|
|
105
|
+
Set the vault items ONCE with `grid_set_secret` (or `grid secrets set`), then
|
|
106
106
|
the deployer injects each as the named env var (`process.env.AUTH_PROVIDER_KEY`,
|
|
107
107
|
`process.env.STRIPE_KEY`, …) at runtime and under `grid dev`. Do NOT commit
|
|
108
108
|
keys; do NOT set secrets in `services.web.env` (that block is for non-secret
|
|
@@ -163,18 +163,18 @@ you want client accounts.
|
|
|
163
163
|
|
|
164
164
|
1. `grid_login_status` → `grid_login` if needed. Respect the grid picker
|
|
165
165
|
(ask which grid if the user has more than one).
|
|
166
|
-
2. `
|
|
166
|
+
2. `grid_create_project` an app `<name>` FIRST — it creates the entity, writes
|
|
167
167
|
`.cloudgrid/link.json`, and a `cloudgrid.yaml` with empty `services: {}`.
|
|
168
168
|
`plug` needs a linked directory.
|
|
169
169
|
3. Write the app under `services/web/` and set `cloudgrid.yaml` to the active
|
|
170
170
|
shape: `name` + `services.web{type: nextjs, path: /}` + `needs:{database:true}`
|
|
171
171
|
+ the `vault:` block. (Leave the `reminders` cron service COMMENTED — see §7.)
|
|
172
|
-
4. Set the secrets: `
|
|
172
|
+
4. Set the secrets: `grid_set_secret` for `auth-provider-key` (and, if taking
|
|
173
173
|
deposits, `stripe-live-key`, `stripe-webhook-secret` — the vault item keys the
|
|
174
174
|
`vault:` block maps from). Non-secret config (auth publishable key, price ids)
|
|
175
|
-
→ `
|
|
175
|
+
→ `grid_set_env` / `services.web.env`. Do NOT set `DATABASE_MONGODB_URL`
|
|
176
176
|
yourself — the grid injects it.
|
|
177
|
-
5. `
|
|
177
|
+
5. `grid_deploy` to deploy. A runtime deploy is **ASYNC** — the first response
|
|
178
178
|
is `status: building`, not a live URL. Poll `grid_status` (or the returned
|
|
179
179
|
poll_url) until live; surface a liveness signal while it builds, never a bare
|
|
180
180
|
silent wait.
|
|
@@ -188,7 +188,7 @@ An appointment-booking app is a built + deployed runtime container, so it
|
|
|
188
188
|
requires the **local edition** (Claude Desktop / Claude Code) or the CLI. The
|
|
189
189
|
**hosted** edition (Claude Web / hosted MCP) is inline-only and can only publish
|
|
190
190
|
static pages — it CANNOT build this app. On hosted, say so plainly and offer a
|
|
191
|
-
static "book us" landing page (via `
|
|
191
|
+
static "book us" landing page (via `grid_deploy`) instead, then stop the runtime
|
|
192
192
|
path.
|
|
193
193
|
|
|
194
194
|
## 7. Reminders (cron — PENDING platform issue #1543)
|
|
@@ -10,8 +10,8 @@ the providers/services/slot rules, then deploy (async — poll to a live URL).
|
|
|
10
10
|
Local edition only.
|
|
11
11
|
|
|
12
12
|
**Fetch the bundle:**
|
|
13
|
-
- `
|
|
14
|
-
- `
|
|
13
|
+
- `grid_get_template("template", "appointment-booking")` — this blueprint (`cloudgrid.yaml` + `AGENTS.md`).
|
|
14
|
+
- `grid_get_template("template", "app-with-data")` — the proven Next.js + Mongo shape to extend (lazy db client, App-Router API).
|
|
15
15
|
|
|
16
16
|
**Key rules:**
|
|
17
17
|
|
|
@@ -26,7 +26,7 @@ Local edition only.
|
|
|
26
26
|
the getter, never at module top level (top-level read fails `next build`).
|
|
27
27
|
4. **Secrets via the `vault:` block** → env vars. `AUTH_PROVIDER_KEY` (and, for
|
|
28
28
|
deposits, `STRIPE_KEY` / `STRIPE_WEBHOOK_SECRET`) map to vault items; set them
|
|
29
|
-
with `
|
|
29
|
+
with `grid_set_secret`, and the deployer injects them at runtime. Read lazily;
|
|
30
30
|
do not commit keys or put secrets in `services.web.env`.
|
|
31
31
|
5. **No double-booking.** `appointments` is the source of truth for "taken";
|
|
32
32
|
compute open slots as availability minus booked, re-check at write time, and
|
|
@@ -65,8 +65,8 @@ vault:
|
|
|
65
65
|
|
|
66
66
|
## Deploy (async, local edition)
|
|
67
67
|
|
|
68
|
-
`
|
|
69
|
-
`services/web/`, set the vault secrets with `
|
|
68
|
+
`grid_create_project` first (creates the entity + link.json), write the app under
|
|
69
|
+
`services/web/`, set the vault secrets with `grid_set_secret`, `grid_deploy`
|
|
70
70
|
(async — poll `grid_status` to a live URL). If taking deposits, register the
|
|
71
71
|
`/api/webhook` URL in Stripe and re-plug. Re-plug the same entity to update the
|
|
72
72
|
same URL.
|
|
@@ -9,7 +9,7 @@ then build the Next.js + Mongo app on the grid following the shape below.
|
|
|
9
9
|
The proven base shape is `app-with-data` (Next.js + Mongo, App Router, lazy DB
|
|
10
10
|
getter). This blueprint extends it with a state machine, roles, and
|
|
11
11
|
notifications. Fetch that template for the concrete Mongo/CRUD wiring:
|
|
12
|
-
`
|
|
12
|
+
`grid_get_template("template", "app-with-data")`, then adapt it to the collections
|
|
13
13
|
here.
|
|
14
14
|
|
|
15
15
|
## 1. File tree
|
|
@@ -146,7 +146,7 @@ routes and the UI agree on what is legal.
|
|
|
146
146
|
|
|
147
147
|
## 6. Deploy steps
|
|
148
148
|
|
|
149
|
-
1. `
|
|
149
|
+
1. `grid_create_project` an app `<name>` — creates the entity, `.cloudgrid/link.json`,
|
|
150
150
|
and a `cloudgrid.yaml` with an empty `services: {}`. Run `init` FIRST because
|
|
151
151
|
`plug` needs a linked directory.
|
|
152
152
|
2. Fill `cloudgrid.yaml` to this blueprint's shape (copy this template's file):
|
|
@@ -14,14 +14,14 @@ machine, and CloudGrid wiring, then build the app under `services/web/`.
|
|
|
14
14
|
|
|
15
15
|
## Fetch bundle
|
|
16
16
|
|
|
17
|
-
- `
|
|
17
|
+
- `grid_get_template("template", "approval-workflow")` → this blueprint:
|
|
18
18
|
- `AGENTS.md` — file tree, Mongo collections (`users`, `requests`, `steps`,
|
|
19
19
|
`audit`), the state machine, auth/payments wiring, deploy steps, edition note.
|
|
20
20
|
- `cloudgrid.yaml` — the full-annotated reference with only `name`,
|
|
21
21
|
`services.web { type: nextjs, path: / }`, and `needs: { database: true }`
|
|
22
22
|
active, plus a commented `vault:` block for `AUTH_PROVIDER_KEY`.
|
|
23
23
|
- `README.md` — one-paragraph what/why.
|
|
24
|
-
- `
|
|
24
|
+
- `grid_get_template("template", "app-with-data")` → the concrete Next.js + Mongo
|
|
25
25
|
CRUD wiring (lazy `lib/db.js`, App Router route, server page) to adapt from.
|
|
26
26
|
|
|
27
27
|
## Key rules
|
|
@@ -80,7 +80,7 @@ needs:
|
|
|
80
80
|
|
|
81
81
|
## Build it
|
|
82
82
|
|
|
83
|
-
Fetch `
|
|
83
|
+
Fetch `grid_get_template("template", "billing-dashboard")` and read **`AGENTS.md`** — it
|
|
84
84
|
has the checkout + webhook + usage wiring, the vault/secret setup, and the deploy
|
|
85
85
|
steps (`grid init` → write under `services/web/` → `grid secrets set` → `grid plug`,
|
|
86
86
|
async → poll to a live URL → register the webhook endpoint in Stripe). Adapt the
|
|
@@ -200,7 +200,7 @@ Runtime app → **local edition** only (Claude Desktop / Claude Code / CLI); the
|
|
|
200
200
|
hosted edition cannot build a runtime container. Order matters — `plug` needs a
|
|
201
201
|
linked directory, so `init` first.
|
|
202
202
|
|
|
203
|
-
1. `grid init` (or `
|
|
203
|
+
1. `grid init` (or `grid_create_project`) an app `<name>` — creates the entity +
|
|
204
204
|
`.cloudgrid/link.json` and a starter `cloudgrid.yaml` with empty `services:{}`.
|
|
205
205
|
2. Fill: put the app under `services/web/` and set `cloudgrid.yaml` to this
|
|
206
206
|
blueprint's active fields (`services.web` nextjs `/`, `needs:{database:true}`).
|
|
@@ -11,7 +11,7 @@ following it.
|
|
|
11
11
|
`AGENTS.md`. Fetch the bundle, read `AGENTS.md`, then generate the files under
|
|
12
12
|
`services/web/` and deploy.
|
|
13
13
|
|
|
14
|
-
- **Structure guide:** `
|
|
14
|
+
- **Structure guide:** `grid_get_template("template", "calendar-scheduler")` → read
|
|
15
15
|
**`AGENTS.md`** (file tree, Mongo collections, CloudGrid injection table,
|
|
16
16
|
optional auth/payments layers, the cron reminder shape blocked on #1543, deploy
|
|
17
17
|
steps, edition note).
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
A single self-contained HTML changelog / release-notes page: reverse-chronological versioned entries, each with a date and tagged change items (added / fixed / changed / removed).
|
|
4
4
|
|
|
5
5
|
Static inspiration — a single self-contained `index.html` (inline CSS and JS,
|
|
6
|
-
no external CDNs). It deploys instantly via `
|
|
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 `
|
|
11
|
+
Fetch the template with `grid_get_template("template", "changelog")`, then replace the
|
|
12
12
|
placeholders:
|
|
13
13
|
|
|
14
14
|
- The product name and page 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 **`
|
|
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 `
|
|
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
|
-
`
|
|
14
|
+
`grid_get_template("template", "changelog")` and fill in the user's content.
|
|
15
15
|
|
|
16
16
|
## cloudgrid.yaml (reference only)
|
|
17
17
|
|
|
@@ -10,13 +10,13 @@ wire it to your own email service or form endpoint if you want real submissions.
|
|
|
10
10
|
|
|
11
11
|
## How it deploys
|
|
12
12
|
|
|
13
|
-
To publish this page, use **`
|
|
13
|
+
To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
|
|
14
14
|
edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
|
|
15
15
|
directory (`type: static`) is ONLY for plugging the page as an OWNED static
|
|
16
|
-
runtime (async, local edition only); the fast path is `
|
|
16
|
+
runtime (async, local edition only); the fast path is `grid_deploy`.
|
|
17
17
|
|
|
18
18
|
The fillable HTML is the real template — fetch it with
|
|
19
|
-
`
|
|
19
|
+
`grid_get_template("template", "company-website")` and fill in the user's content.
|
|
20
20
|
|
|
21
21
|
## How to adapt
|
|
22
22
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
# ignored by the parser, so the file deploys to exactly the active fields.
|
|
12
12
|
#
|
|
13
13
|
# company-website is a STATIC template (type: static, path: /) with no needs.
|
|
14
|
-
# The fast path deploys the page as an INSPIRATION via
|
|
14
|
+
# The fast path deploys the page as an INSPIRATION via grid_deploy (instant,
|
|
15
15
|
# works on hosted). This cloudgrid.yaml is the reference for plugging it as an
|
|
16
16
|
# OWNED static runtime; the active fields are exactly: name + services.web.
|
|
17
17
|
#
|
|
@@ -6,13 +6,13 @@ Inline CSS + inline JS only (no external scripts, stylesheets, fonts, or CDNs).
|
|
|
6
6
|
|
|
7
7
|
## How it deploys
|
|
8
8
|
|
|
9
|
-
To publish this page, use **`
|
|
9
|
+
To publish this page, use **`grid_deploy`** with the inline `html`: it deploys as an **inspiration** — instant, and works on the **hosted**
|
|
10
10
|
edition (Claude Web) as well as local. The reference `cloudgrid.yaml` in this
|
|
11
11
|
directory (`type: static`) is ONLY for plugging the page as an OWNED static
|
|
12
|
-
runtime (async, local edition only); the fast path is `
|
|
12
|
+
runtime (async, local edition only); the fast path is `grid_deploy`.
|
|
13
13
|
|
|
14
14
|
The fillable HTML is the real template — fetch it with
|
|
15
|
-
`
|
|
15
|
+
`grid_get_template("template", "company-website")` and fill in the user's content.
|
|
16
16
|
|
|
17
17
|
## cloudgrid.yaml (reference only)
|
|
18
18
|
|
|
@@ -7,7 +7,7 @@ Next.js + Mongo app with auth and payments.
|
|
|
7
7
|
**This is a blueprint, not app code.** It ships the correct `cloudgrid.yaml` and
|
|
8
8
|
an `AGENTS.md` structure guide. Read `AGENTS.md`, then build the app under
|
|
9
9
|
`services/web/` following it. Fetch the guide with
|
|
10
|
-
`
|
|
10
|
+
`grid_get_template("template", "course-platform")`.
|
|
11
11
|
|
|
12
12
|
**Key rules:**
|
|
13
13
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
# THIS TEMPLATE (dashboard): 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
|
|
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 **`
|
|
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 `
|
|
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
|
-
`
|
|
14
|
+
`grid_get_template("template", "dashboard")` and fill in the user's content.
|
|
15
15
|
|
|
16
16
|
## cloudgrid.yaml (reference only)
|
|
17
17
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
# THIS TEMPLATE (deck): 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
|
|
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 **`
|
|
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 `
|
|
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
|
-
`
|
|
14
|
+
`grid_get_template("template", "deck")` 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 documentation site: a sidebar nav, a scrolling content column with headings and code blocks, and a client-side search box that filters the nav. No backend.
|
|
4
4
|
|
|
5
5
|
Static inspiration — a single self-contained `index.html` (inline CSS and JS,
|
|
6
|
-
no external CDNs). It deploys instantly via `
|
|
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 `
|
|
11
|
+
Fetch the template with `grid_get_template("template", "docs-site")`, then replace the
|
|
12
12
|
placeholders:
|
|
13
13
|
|
|
14
14
|
- The project/doc name and the sidebar section links.
|
|
@@ -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 **`
|
|
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 `
|
|
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
|
-
`
|
|
14
|
+
`grid_get_template("template", "docs-site")` and fill in the user's content.
|
|
15
15
|
|
|
16
16
|
## cloudgrid.yaml (reference only)
|
|
17
17
|
|
|
@@ -104,7 +104,7 @@ dev` and runtime.
|
|
|
104
104
|
injects that vault item as `process.env.ENV_VAR`. This blueprint maps
|
|
105
105
|
`AUTH_PROVIDER_SECRET_KEY` and `AUTH_PROVIDER_PUBLISHABLE_KEY`. Rename the env
|
|
106
106
|
keys to whatever the provider SDK expects (see §4) and set the vault items with
|
|
107
|
-
`
|
|
107
|
+
`grid_set_secret` / the org vault — do not commit keys.
|
|
108
108
|
- **AI (optional)** — if you add `needs: { ai: true }` (e.g. auto-moderation or
|
|
109
109
|
summarize-thread), the grid injects **`AI_GATEWAY_URL`**; call it via
|
|
110
110
|
`@cloudgrid-io/ai`. Not required for the base forum.
|
|
@@ -169,16 +169,16 @@ A forum is a runtime (built + deployed container) app — **local edition**
|
|
|
169
169
|
|
|
170
170
|
1. `grid_login_status` → `grid_login` if needed. Respect the grid picker
|
|
171
171
|
(ask which grid if the user has more than one).
|
|
172
|
-
2. `
|
|
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`
|
|
174
174
|
needs a linked dir).
|
|
175
175
|
3. Write the app under `services/web/` per §1, then fill `cloudgrid.yaml` to the
|
|
176
176
|
active shape: `name`, `services.web { type: nextjs, path: / }`, `needs:
|
|
177
177
|
{ database: true }`, and the `vault:` mappings for the auth keys.
|
|
178
|
-
4. Set the auth secrets: `
|
|
178
|
+
4. Set the auth secrets: `grid_set_secret` (or the org vault) for the provider
|
|
179
179
|
keys. Do NOT set `DATABASE_MONGODB_URL` — the grid injects it.
|
|
180
180
|
5. (Optional) `grid dev` to run locally against injected Mongo before shipping.
|
|
181
|
-
6. `
|
|
181
|
+
6. `grid_deploy` to deploy. A runtime deploy is **ASYNC** — the first response
|
|
182
182
|
is `status: building`, not a live URL. Poll `grid_status` (or the returned
|
|
183
183
|
poll_url) until live; surface a liveness signal while it builds, never a bare
|
|
184
184
|
spinner.
|
|
@@ -7,7 +7,7 @@ moderation, on Next.js + grid-shared MongoDB, auth via a hosted provider
|
|
|
7
7
|
under `services/web/` following it. The shape mirrors the proven `app-with-data`
|
|
8
8
|
template (lazy Mongo getter, App-Router routes, `needs: { database: true }`).
|
|
9
9
|
|
|
10
|
-
**Fetch the bundle:** `
|
|
10
|
+
**Fetch the bundle:** `grid_get_template("template", "forum")` returns this
|
|
11
11
|
directory — `cloudgrid.yaml`, `AGENTS.md` (the structure guide), and this file.
|
|
12
12
|
|
|
13
13
|
**Key rules:**
|
|
@@ -28,7 +28,7 @@ Runtime app → **local edition only**, async deploy (poll to a live URL).
|
|
|
28
28
|
|
|
29
29
|
## Fetch bundle
|
|
30
30
|
|
|
31
|
-
Fetch this blueprint with `
|
|
31
|
+
Fetch this blueprint with `grid_get_template("template", "hr-portal")`. It returns
|
|
32
32
|
`cloudgrid.yaml`, `AGENTS.md` (the structure guide), and this README — no app
|
|
33
33
|
code. Follow `AGENTS.md` to build, then `grid init → fill → grid plug → poll`.
|
|
34
34
|
|
|
@@ -34,7 +34,7 @@ Runtime app → **local edition only**, async deploy (poll to a live URL).
|
|
|
34
34
|
|
|
35
35
|
## Fetch bundle
|
|
36
36
|
|
|
37
|
-
Fetch this blueprint with `
|
|
37
|
+
Fetch this blueprint with `grid_get_template("template", "internal-tools-portal")`. It
|
|
38
38
|
returns `cloudgrid.yaml`, `AGENTS.md` (the structure guide), and this README — no
|
|
39
39
|
app code. Follow `AGENTS.md` to build, then `grid init → fill → grid plug → poll`.
|
|
40
40
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
# THIS TEMPLATE (landing-page): 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
|
|
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 **`
|
|
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 `
|
|
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
|
-
`
|
|
14
|
+
`grid_get_template("template", "landing-page")` and fill in the user's content.
|
|
15
15
|
|
|
16
16
|
## cloudgrid.yaml (reference only)
|
|
17
17
|
|