@cloudgrid-io/mcp 0.16.2 → 0.18.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 +39 -39
- package/package.json +1 -1
- package/src/corpus/capability-map.md +15 -9
- package/src/corpus/cloudgrid-yaml.md +10 -8
- package/src/corpus/cookbook.md +4 -4
- package/src/corpus/install-for-agents.md +1 -2
- package/src/corpus/install.md +1 -1
- package/src/corpus/rules/publish-fallbacks.md +1 -1
- package/src/corpus/skill-claim.md +1 -1
- package/src/corpus/skill-login.md +2 -2
- package/src/corpus/skill-plug.md +69 -6
- package/src/corpus/skills-readme.md +10 -10
- 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 +3 -3
- package/src/corpus/templates/api-docs/index.md +3 -4
- package/src/corpus/templates/appointment-booking/AGENTS.md +9 -9
- package/src/corpus/templates/appointment-booking/index.md +6 -6
- 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 +3 -3
- package/src/corpus/templates/changelog/index.md +3 -4
- package/src/corpus/templates/company-website/README.md +3 -4
- package/src/corpus/templates/company-website/cloudgrid.yaml +1 -1
- package/src/corpus/templates/company-website/index.md +3 -4
- 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 -4
- package/src/corpus/templates/deck/cloudgrid.yaml +1 -1
- package/src/corpus/templates/deck/index.md +3 -4
- package/src/corpus/templates/docs-site/README.md +3 -3
- package/src/corpus/templates/docs-site/index.md +3 -4
- package/src/corpus/templates/forum/AGENTS.md +6 -6
- 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 -4
- 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 +9 -9
- package/src/corpus/templates/membership-site/index.md +6 -6
- package/src/corpus/templates/online-store/index.md +1 -1
- package/src/corpus/templates/portfolio/README.md +3 -3
- package/src/corpus/templates/portfolio/index.md +3 -4
- package/src/corpus/templates/product-launch/README.md +3 -4
- package/src/corpus/templates/product-launch/cloudgrid.yaml +1 -1
- package/src/corpus/templates/product-launch/index.md +3 -4
- package/src/corpus/templates/report/cloudgrid.yaml +1 -1
- package/src/corpus/templates/report/index.md +3 -4
- package/src/corpus/templates/restaurant-reservations/AGENTS.md +9 -9
- package/src/corpus/templates/restaurant-reservations/index.md +2 -2
- package/src/corpus/templates/saas-marketing/README.md +3 -3
- package/src/corpus/templates/saas-marketing/index.md +3 -4
- package/src/corpus/templates/status-page/README.md +3 -3
- package/src/corpus/templates/status-page/index.md +3 -4
- package/src/corpus/templates/subscription-management/AGENTS.md +9 -9
- package/src/corpus/templates/subscription-management/index.md +6 -6
- package/src/corpus/templates/waitlist/README.md +3 -3
- package/src/corpus/templates/waitlist/index.md +3 -4
- package/src/corpus/templates/web-app/cloudgrid.yaml +1 -1
- package/src/corpus/templates/web-app/index.md +3 -4
- package/src/corpus/troubleshooting/deploy-errors.md +1 -1
- package/src/corpus/troubleshooting/persistent-apps.md +1 -1
- package/src/corpus/usage.md +3 -3
- package/src/corpus/workflows/admin-dashboard.md +6 -6
- package/src/corpus/workflows/ai-app.md +8 -8
- package/src/corpus/workflows/ai-knowledge-base.md +6 -6
- package/src/corpus/workflows/analytics-dashboard.md +6 -6
- package/src/corpus/workflows/api-dashboard.md +6 -6
- package/src/corpus/workflows/api-docs.md +3 -3
- package/src/corpus/workflows/api-service.md +8 -8
- package/src/corpus/workflows/app-with-data.md +8 -8
- package/src/corpus/workflows/appointment-booking.md +8 -8
- package/src/corpus/workflows/approval-workflow.md +6 -6
- package/src/corpus/workflows/billing-dashboard.md +8 -8
- package/src/corpus/workflows/blog-cms.md +6 -6
- package/src/corpus/workflows/booking-system.md +7 -7
- package/src/corpus/workflows/calendar-scheduler.md +6 -6
- package/src/corpus/workflows/changelog.md +3 -3
- package/src/corpus/workflows/company-website.md +4 -4
- package/src/corpus/workflows/course-platform.md +7 -7
- package/src/corpus/workflows/crm.md +7 -7
- package/src/corpus/workflows/dashboard.md +4 -4
- package/src/corpus/workflows/directory.md +6 -6
- package/src/corpus/workflows/docs-site.md +3 -3
- package/src/corpus/workflows/erp.md +7 -7
- package/src/corpus/workflows/event-board.md +6 -6
- package/src/corpus/workflows/expense-tracker.md +6 -6
- package/src/corpus/workflows/feature-request-board.md +6 -6
- package/src/corpus/workflows/financial-dashboard.md +6 -6
- package/src/corpus/workflows/forum.md +7 -7
- package/src/corpus/workflows/hr-portal.md +7 -7
- package/src/corpus/workflows/internal-tools-portal.md +7 -7
- package/src/corpus/workflows/inventory.md +6 -6
- package/src/corpus/workflows/invoice.md +6 -6
- package/src/corpus/workflows/job-board.md +6 -6
- package/src/corpus/workflows/kanban.md +7 -7
- package/src/corpus/workflows/landing-page.md +4 -4
- package/src/corpus/workflows/lms.md +7 -7
- package/src/corpus/workflows/marketplace.md +6 -6
- package/src/corpus/workflows/membership-site.md +8 -8
- package/src/corpus/workflows/monitoring-dashboard.md +6 -6
- package/src/corpus/workflows/online-store.md +8 -8
- package/src/corpus/workflows/portfolio.md +3 -3
- package/src/corpus/workflows/presentation.md +4 -4
- package/src/corpus/workflows/product-catalog.md +6 -6
- package/src/corpus/workflows/product-launch.md +4 -4
- package/src/corpus/workflows/project-management.md +6 -6
- package/src/corpus/workflows/property-listings.md +6 -6
- package/src/corpus/workflows/quiz-platform.md +6 -6
- package/src/corpus/workflows/report.md +4 -4
- package/src/corpus/workflows/restaurant-reservations.md +7 -7
- package/src/corpus/workflows/revenue-dashboard.md +6 -6
- package/src/corpus/workflows/saas-marketing.md +3 -3
- package/src/corpus/workflows/semantic-search.md +7 -7
- package/src/corpus/workflows/status-page.md +3 -3
- package/src/corpus/workflows/subscription-management.md +8 -8
- package/src/corpus/workflows/task-manager.md +6 -6
- package/src/corpus/workflows/ticket-system.md +6 -6
- package/src/corpus/workflows/time-tracking.md +6 -6
- package/src/corpus/workflows/travel-booking.md +7 -7
- package/src/corpus/workflows/waitlist.md +3 -3
- package/src/corpus/workflows/web-app.md +4 -4
- package/src/docs.js +5 -5
- package/src/index.js +1 -1
- package/src/tools.js +329 -734
- package/src/web.js +2 -2
- package/src/widgets/live-result.html +1 -1
- package/src/widgets/org-picker.html +3 -3
- package/src/corpus/skill-drop.md +0 -140
|
@@ -6,7 +6,7 @@ deploy: runtime
|
|
|
6
6
|
editions: local
|
|
7
7
|
capabilities_note: "Document search — needs a database (Mongo) for the documents + chunks collections. Two services: a React (Vite) static frontend at / and a FastAPI backend at /backend. Hybrid search = Mongo $text (lexical) + in-app NumPy cosine over chunk embedding arrays (semantic) + metadata filters, blended to the document level. Runtime app, async build, local edition only. Declare needs:{database:true}. NO needs:vector — pgvector runtime role-grant is blocked (#1545), so embeddings live in the Mongo chunks collection and are cosine-ranked in-app. Two refresh paths: the manager 'Refresh now' endpoint AND a scheduled Python type:cron job (services/refresh, daily 03:00 UTC) that vendors the backend app/ modules and reuses indexing.run_sync — both degrade gracefully. Health is green with no secrets; startup ensure_indexes() so $text never 500s on an empty catalog. Pluggable source (dropbox|local|url) + embeddings (OpenAI-compatible) each behind one config point, all secrets from env."
|
|
8
8
|
summary: "Build a document-search app on the grid — index a folder of PDFs/DOCX/TXT/MD, then search by keyword + meaning + metadata, with a grounded answer mode and manager admin. React static frontend at / + FastAPI backend at /backend, backed by grid-shared Mongo. Edition-gate first, scaffold, put the code under services/web/ + services/backend/, declare needs:{database:true} (NO vector #1545), wire the web+backend+refresh services, set the embeddings + source + manager secrets, deploy async, poll to a live URL, then Refresh now (or wait for the daily cron) to index."
|
|
9
|
-
recipe: "edition-gate -> auth+grid ->
|
|
9
|
+
recipe: "edition-gate -> auth+grid -> grid_init -> fetch template + read AGENTS.md -> put code under services/web + services/backend, set cloudgrid.yaml active fields -> grid secrets set (embeddings + source + MANAGER_PASSWORD_HASH) -> optional grid dev -> grid plug (async, poll) -> Refresh now to index -> return live URL"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Workflow: semantic-search
|
|
@@ -36,19 +36,19 @@ the **local edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
36
36
|
|
|
37
37
|
## 2. Auth + grid
|
|
38
38
|
|
|
39
|
-
1. Ensure signed in: `
|
|
39
|
+
1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
|
|
40
40
|
2. A grid is required. Respect the grid picker: if the user has more than one
|
|
41
41
|
grid, ask which to use; do not assume a target.
|
|
42
42
|
|
|
43
43
|
## 3. Scaffold
|
|
44
44
|
|
|
45
|
-
`
|
|
45
|
+
`grid_init` an app `<name>` FIRST — it creates the entity +
|
|
46
46
|
`.cloudgrid/link.json` and a starter `cloudgrid.yaml` with empty `services: {}`
|
|
47
47
|
(`plug` needs a linked directory).
|
|
48
48
|
|
|
49
49
|
## 4. Fetch the template and READ AGENTS.md
|
|
50
50
|
|
|
51
|
-
`
|
|
51
|
+
`grid_fetch("template", "semantic-search")`. Read **`AGENTS.md`** before
|
|
52
52
|
writing anything — it defines the file tree, the `documents` + `chunks`
|
|
53
53
|
collections + fields, the Mongo injection, the pluggable source adapter, the
|
|
54
54
|
embeddings config point, the secrets, the deploy flow, and the four baked-in
|
|
@@ -111,7 +111,7 @@ the cron **vendors** the backend `app/` modules it needs into
|
|
|
111
111
|
|
|
112
112
|
Store all of these with `grid secrets set KEY=VALUE` (never commit them; the app
|
|
113
113
|
reads them lazily inside functions, never at import). Non-secret public config →
|
|
114
|
-
`
|
|
114
|
+
`grid_env`. Do NOT set `DATABASE_MONGODB_URL` yourself — the grid injects it.
|
|
115
115
|
|
|
116
116
|
The app starts and passes `GET /backend/health` with **none** of these set;
|
|
117
117
|
search/indexing degrade to a clear "not indexed / missing secret" state.
|
|
@@ -123,9 +123,9 @@ before deploying. Don't require it.
|
|
|
123
123
|
|
|
124
124
|
## 8. Deploy (async)
|
|
125
125
|
|
|
126
|
-
Deploy the folder with `
|
|
126
|
+
Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
|
|
127
127
|
response is `status: "building"`, NOT a live URL yet.
|
|
128
|
-
- Poll `
|
|
128
|
+
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
129
129
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
130
130
|
- Only once it is live, return the deployed app URL (NOT the build/log link).
|
|
131
131
|
|
|
@@ -4,7 +4,7 @@ when: status page, service status, uptime page, incident history, is-it-down pag
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure, status baked into the page. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure, status baked into the page. Publishes as an inspiration (instant, works on hosted) via grid_plug.
|
|
8
8
|
summary: Fetch the status-page template, fill it with the user's components and incidents, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@ recipe. This is a display-only static page — the status is baked into the mark
|
|
|
15
15
|
there is no live polling. Do not ask setup questions first; use sensible defaults
|
|
16
16
|
and build.
|
|
17
17
|
|
|
18
|
-
1. **Fetch the template.** Call `
|
|
18
|
+
1. **Fetch the template.** Call `grid_fetch("template", "status-page")` to load
|
|
19
19
|
the self-contained HTML status page (overall banner, component list with
|
|
20
20
|
up/degraded/down pills, per-component uptime bars, incident history).
|
|
21
21
|
2. **Fill the template.** Replace the placeholders with the user's content:
|
|
@@ -27,7 +27,7 @@ and build.
|
|
|
27
27
|
stylesheets, fonts, or large embedded media.
|
|
28
28
|
3. **Deploy.** Deploy the filled HTML:
|
|
29
29
|
- Hosted MCP edition: call the drop tool with the HTML.
|
|
30
|
-
- Local MCP / CLI edition: write the HTML to a file and run `
|
|
30
|
+
- Local MCP / CLI edition: write the HTML to a file and run `grid plug`.
|
|
31
31
|
It is an inspiration and deploys synchronously, so you get a URL right away.
|
|
32
32
|
4. **Return the live share URL.** For revisions, re-deploy with the entity id
|
|
33
33
|
from the first deploy — it updates the same share URL.
|
|
@@ -40,7 +40,7 @@ A subscription-management app is a built + deployed container. It requires the
|
|
|
40
40
|
|
|
41
41
|
## 2. Auth + grid
|
|
42
42
|
|
|
43
|
-
1. Ensure signed in: `
|
|
43
|
+
1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
|
|
44
44
|
2. A grid is required. Respect the grid picker: if the user has more than one
|
|
45
45
|
grid, ask which to use; do not assume a target.
|
|
46
46
|
|
|
@@ -49,18 +49,18 @@ A subscription-management app is a built + deployed container. It requires the
|
|
|
49
49
|
Fetch the template and read its structure guide — this is the core of the
|
|
50
50
|
workflow:
|
|
51
51
|
|
|
52
|
-
- `
|
|
52
|
+
- `grid_fetch("template", "subscription-management")` — the `cloudgrid.yaml` +
|
|
53
53
|
**`AGENTS.md`**. AGENTS.md has the file tree, the Mongo collections
|
|
54
54
|
(`customers`, `subscriptions`), the CloudGrid injection table, and the Stripe
|
|
55
55
|
change-plan / cancel / billing-portal / webhook wiring. **Read it fully before
|
|
56
56
|
building.**
|
|
57
|
-
- `
|
|
57
|
+
- `grid_fetch("template", "app-with-data")` — the proven Next.js + Mongo
|
|
58
58
|
shape this blueprint extends (lazy db client in `lib/db.js`, App-Router
|
|
59
59
|
GET/POST route). Imitate its wiring.
|
|
60
60
|
|
|
61
61
|
## 4. Scaffold
|
|
62
62
|
|
|
63
|
-
`
|
|
63
|
+
`grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
64
64
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
65
65
|
directory, so run `init` FIRST. Then write the app under **`services/web/`** and
|
|
66
66
|
set `cloudgrid.yaml` to the active shape below.
|
|
@@ -109,12 +109,12 @@ never set `needs:` and `requires:` together (the validator rejects it).
|
|
|
109
109
|
|
|
110
110
|
## 6. Config / secrets
|
|
111
111
|
|
|
112
|
-
- Stripe secrets → `
|
|
112
|
+
- Stripe secrets → `grid_secrets` (set the vault items `stripe-live-key` and
|
|
113
113
|
`stripe-webhook-secret` that the `vault:` block maps from). The deployer
|
|
114
114
|
injects each as its env var at runtime and under `grid dev`. Add
|
|
115
115
|
`auth-provider-key` too if you use an auth SDK.
|
|
116
116
|
- Non-secret config (Stripe publishable key `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY`,
|
|
117
|
-
price ids, auth publishable key) → `
|
|
117
|
+
price ids, auth publishable key) → `grid_env` / `services.web.env`.
|
|
118
118
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
|
|
119
119
|
`MONGODB_URL`) — the grid injects them.
|
|
120
120
|
|
|
@@ -125,9 +125,9 @@ and vault secrets before deploying. Don't require it.
|
|
|
125
125
|
|
|
126
126
|
## 8. Deploy (async)
|
|
127
127
|
|
|
128
|
-
Deploy the folder with `
|
|
128
|
+
Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
|
|
129
129
|
response is `status: "building"`, NOT a live URL yet.
|
|
130
|
-
- Poll `
|
|
130
|
+
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
131
131
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
132
132
|
- Once live, register the `/api/webhook` URL as the Stripe webhook endpoint,
|
|
133
133
|
copy the signing secret into the `stripe-webhook-secret` vault item, configure
|
|
@@ -33,13 +33,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
33
33
|
|
|
34
34
|
## 2. Auth + grid
|
|
35
35
|
|
|
36
|
-
1. Ensure signed in: `
|
|
36
|
+
1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
|
|
37
37
|
2. A grid is required. Respect the grid picker: if the user has more than one
|
|
38
38
|
grid, ask which to use; do not assume a target.
|
|
39
39
|
|
|
40
40
|
## 3. Scaffold
|
|
41
41
|
|
|
42
|
-
`
|
|
42
|
+
`grid_init` 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
|
-
`
|
|
67
|
+
`grid_fetch("template", "task-manager")`. It is a minimal, real Next.js +
|
|
68
68
|
`mongodb`-driver task manager under `services/web/`: a lazy client in
|
|
69
69
|
`services/web/lib/db.js`, an App-Router GET/POST/PATCH/DELETE route on a
|
|
70
70
|
`tasks` collection (PATCH toggles done), a server-component page, and a client
|
|
@@ -82,15 +82,15 @@ before deploying. Don't require it.
|
|
|
82
82
|
|
|
83
83
|
## 6. Config
|
|
84
84
|
|
|
85
|
-
- API keys / secrets → `
|
|
85
|
+
- API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
|
|
86
86
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
87
87
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
88
88
|
|
|
89
89
|
## 7. Deploy (async)
|
|
90
90
|
|
|
91
|
-
Deploy the folder with `
|
|
91
|
+
Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
|
|
92
92
|
response is `status: "building"`, NOT a live URL yet.
|
|
93
|
-
- Poll `
|
|
93
|
+
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
94
94
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
95
95
|
- Only once it is live, return the deployed app URL (NOT the build/log link).
|
|
96
96
|
|
|
@@ -31,13 +31,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
31
31
|
|
|
32
32
|
## 2. Auth + grid
|
|
33
33
|
|
|
34
|
-
1. Ensure signed in: `
|
|
34
|
+
1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
|
|
35
35
|
2. A grid is required. Respect the grid picker: if the user has more than one
|
|
36
36
|
grid, ask which to use; do not assume a target.
|
|
37
37
|
|
|
38
38
|
## 3. Scaffold
|
|
39
39
|
|
|
40
|
-
`
|
|
40
|
+
`grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
41
41
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
42
42
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
43
43
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -65,7 +65,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
65
65
|
`services.web`, and `needs.database` uncommented — so it deploys to exactly
|
|
66
66
|
those active fields.
|
|
67
67
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
68
|
-
`
|
|
68
|
+
`grid_fetch("template", "ticket-system")`. It is a minimal, real Next.js +
|
|
69
69
|
`mongodb`-driver app under `services/web/`: a lazy client in
|
|
70
70
|
`services/web/lib/db.js`, an App-Router GET/POST/PATCH (status)/DELETE route on a `tickets` collection, a
|
|
71
71
|
server-component page, and a client component.
|
|
@@ -82,15 +82,15 @@ before deploying. Don't require it.
|
|
|
82
82
|
|
|
83
83
|
## 6. Config
|
|
84
84
|
|
|
85
|
-
- API keys / secrets → `
|
|
85
|
+
- API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
|
|
86
86
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
87
87
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
88
88
|
|
|
89
89
|
## 7. Deploy (async)
|
|
90
90
|
|
|
91
|
-
Deploy the folder with `
|
|
91
|
+
Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
|
|
92
92
|
response is `status: "building"`, NOT a live URL yet.
|
|
93
|
-
- Poll `
|
|
93
|
+
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
94
94
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
95
95
|
- Only once it is live, return the deployed app URL (NOT the build/log link).
|
|
96
96
|
|
|
@@ -32,13 +32,13 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
32
32
|
|
|
33
33
|
## 2. Auth + grid
|
|
34
34
|
|
|
35
|
-
1. Ensure signed in: `
|
|
35
|
+
1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
|
|
36
36
|
2. A grid is required. Respect the grid picker: if the user has more than one
|
|
37
37
|
grid, ask which to use; do not assume a target.
|
|
38
38
|
|
|
39
39
|
## 3. Scaffold
|
|
40
40
|
|
|
41
|
-
`
|
|
41
|
+
`grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
42
42
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a linked
|
|
43
43
|
directory, so run `init` FIRST. Then (a) write the app under **`services/web/`**,
|
|
44
44
|
and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
@@ -63,7 +63,7 @@ and (b) fill `cloudgrid.yaml` to the shape below (`services.web` + `needs:
|
|
|
63
63
|
author new yaml with it, and never set `needs:` and `requires:` together (the
|
|
64
64
|
validator rejects it).
|
|
65
65
|
2. Fetch the template for the Mongo wiring + CRUD shape:
|
|
66
|
-
`
|
|
66
|
+
`grid_fetch("template", "time-tracking")`. It is a minimal, real Next.js +
|
|
67
67
|
`mongodb`-driver time tracker under `services/web/`: a lazy client in
|
|
68
68
|
`services/web/lib/db.js`, an App-Router GET/POST/DELETE route on an `entries`
|
|
69
69
|
collection, a server-component page, and a client form that also renders
|
|
@@ -85,15 +85,15 @@ before deploying. Don't require it.
|
|
|
85
85
|
|
|
86
86
|
## 6. Config
|
|
87
87
|
|
|
88
|
-
- API keys / secrets → `
|
|
88
|
+
- API keys / secrets → `grid_secrets`. Non-secret config → `grid_env`.
|
|
89
89
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` or the
|
|
90
90
|
legacy `MONGODB_URL`) — the grid injects them.
|
|
91
91
|
|
|
92
92
|
## 7. Deploy (async)
|
|
93
93
|
|
|
94
|
-
Deploy the folder with `
|
|
94
|
+
Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
|
|
95
95
|
response is `status: "building"`, NOT a live URL yet.
|
|
96
|
-
- Poll `
|
|
96
|
+
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
97
97
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
98
98
|
- Only once it is live, return the deployed app URL (NOT the build/log link).
|
|
99
99
|
|
|
@@ -40,18 +40,18 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
40
40
|
|
|
41
41
|
## 2. Auth + grid
|
|
42
42
|
|
|
43
|
-
1. Ensure signed in: `
|
|
43
|
+
1. Ensure signed in: `grid_login_status`; if not, `grid_login`.
|
|
44
44
|
2. A grid is required. Respect the grid picker: if the user has more than one
|
|
45
45
|
grid, ask which to use; do not assume a target.
|
|
46
46
|
|
|
47
47
|
## 3. Read the blueprint, then scaffold
|
|
48
48
|
|
|
49
|
-
1. Fetch the blueprint: `
|
|
49
|
+
1. Fetch the blueprint: `grid_fetch("template", "travel-booking")`. **Read its
|
|
50
50
|
`AGENTS.md`** — it is the structure guide (file tree under `services/web/`, the
|
|
51
51
|
`flights` / `hotels` / `bookings` / `trips` collections + the overbooking
|
|
52
52
|
guard, how CloudGrid injects the DB and vault secrets, how to wire Stripe +
|
|
53
53
|
auth, and the trip-reminder-cron design).
|
|
54
|
-
2. `
|
|
54
|
+
2. `grid_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
|
|
55
55
|
and writes a `cloudgrid.yaml` with an EMPTY `services: {}`. `plug` needs a
|
|
56
56
|
linked directory, so run `init` FIRST.
|
|
57
57
|
|
|
@@ -88,9 +88,9 @@ edition** (Claude Desktop / Claude Code) or the CLI.
|
|
|
88
88
|
|
|
89
89
|
## 5. Config (secrets)
|
|
90
90
|
|
|
91
|
-
- Payment/auth secrets → add the vault items with `
|
|
91
|
+
- Payment/auth secrets → add the vault items with `grid_secrets` (e.g.
|
|
92
92
|
`stripe-live-key`, `stripe-webhook-secret`, `auth-provider-key`) BEFORE plug so
|
|
93
|
-
the `vault:` mappings resolve. Non-secret config → `
|
|
93
|
+
the `vault:` mappings resolve. Non-secret config → `grid_env`.
|
|
94
94
|
- Do **NOT** set the DB connection vars yourself (`DATABASE_MONGODB_URL` / legacy
|
|
95
95
|
`MONGODB_URL`) — the grid injects them.
|
|
96
96
|
|
|
@@ -102,9 +102,9 @@ require it.
|
|
|
102
102
|
|
|
103
103
|
## 7. Deploy (async)
|
|
104
104
|
|
|
105
|
-
Deploy the folder with `
|
|
105
|
+
Deploy the folder with `grid_plug`. A **runtime deploy is ASYNC**: the first
|
|
106
106
|
response is `status: "building"`, NOT a live URL yet.
|
|
107
|
-
- Poll `
|
|
107
|
+
- Poll `grid_status` (or the returned poll_url) until the entity is live.
|
|
108
108
|
- Surface a liveness signal while it builds — never a bare silent wait.
|
|
109
109
|
- Only once it is live, return the deployed app URL (NOT the build/log link).
|
|
110
110
|
|
|
@@ -4,7 +4,7 @@ when: waitlist, coming soon, early access, join the list, launch page, sign-up t
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure. The email form posts to a configurable mailto/external endpoint; it does NOT store signups. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure. The email form posts to a configurable mailto/external endpoint; it does NOT store signups. Publishes as an inspiration (instant, works on hosted) via grid_plug.
|
|
8
8
|
summary: Fetch the waitlist template, fill it with the user's launch copy, wire the form to a mailto or external endpoint, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -22,7 +22,7 @@ NOT store signups anywhere on CloudGrid. To actually **store** waitlist signups
|
|
|
22
22
|
(`needs: { database: true }`) — that is a CRUD app, coming in the crud-app
|
|
23
23
|
archetype (Wave 1b). Do not claim this static page persists data.
|
|
24
24
|
|
|
25
|
-
1. **Fetch the template.** Call `
|
|
25
|
+
1. **Fetch the template.** Call `grid_fetch("template", "waitlist")` to load
|
|
26
26
|
the self-contained HTML waitlist page (hero, email form, social-proof counter).
|
|
27
27
|
2. **Fill the template.** Replace the placeholders with the user's content:
|
|
28
28
|
- The product name, coming-soon headline, and subheadline.
|
|
@@ -33,7 +33,7 @@ archetype (Wave 1b). Do not claim this static page persists data.
|
|
|
33
33
|
stylesheets, fonts, or large embedded media.
|
|
34
34
|
3. **Deploy.** Deploy the filled HTML:
|
|
35
35
|
- Hosted MCP edition: call the drop tool with the HTML.
|
|
36
|
-
- Local MCP / CLI edition: write the HTML to a file and run `
|
|
36
|
+
- Local MCP / CLI edition: write the HTML to a file and run `grid plug`.
|
|
37
37
|
It is an inspiration and deploys synchronously, so you get a URL right away.
|
|
38
38
|
4. **Return the live share URL.** For revisions, re-deploy with the entity id
|
|
39
39
|
from the first deploy — it updates the same share URL. If the user needs
|
|
@@ -4,7 +4,7 @@ when: calculator, converter, generator, timer, quiz, interactive tool, mini-app,
|
|
|
4
4
|
needs: none
|
|
5
5
|
deploy: inspiration
|
|
6
6
|
editions: all
|
|
7
|
-
capabilities_note: static — no infrastructure, state lives only in memory. Publishes as an inspiration (instant, works on hosted) via
|
|
7
|
+
capabilities_note: static — no infrastructure, state lives only in memory. Publishes as an inspiration (instant, works on hosted) via grid_plug.
|
|
8
8
|
summary: Fetch the web-app template, adapt its markup and inline JS to the user's tool, deploy it, and return the live share URL.
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -14,9 +14,9 @@ Detect the intent ("build me a web app / tool / calculator that does X") and
|
|
|
14
14
|
follow this recipe. Do not ask setup questions first; use sensible defaults and
|
|
15
15
|
build.
|
|
16
16
|
|
|
17
|
-
1. **Fetch the template.** Call `
|
|
17
|
+
1. **Fetch the template.** Call `grid_fetch("template", "web-app")` to load
|
|
18
18
|
the self-contained interactive HTML app template.
|
|
19
|
-
2. **(Optional) Fetch the example.** Call `
|
|
19
|
+
2. **(Optional) Fetch the example.** Call `grid_fetch("example", "web-app")`
|
|
20
20
|
to see a real working tool as a reference for structure and inline logic.
|
|
21
21
|
3. **Adapt the template.** Rework the markup and inline JavaScript into the tool
|
|
22
22
|
the user asked for:
|
|
@@ -27,7 +27,7 @@ build.
|
|
|
27
27
|
stylesheets, fonts, or CDNs — inline everything.
|
|
28
28
|
4. **Deploy.** Deploy the filled HTML:
|
|
29
29
|
- Hosted MCP edition: call the drop tool with the HTML.
|
|
30
|
-
- Local MCP / CLI edition: write the HTML to a file and run `
|
|
30
|
+
- Local MCP / CLI edition: write the HTML to a file and run `grid plug`.
|
|
31
31
|
A web app is an inspiration and deploys synchronously, so you get a URL
|
|
32
32
|
right away.
|
|
33
33
|
5. **Return the live share URL.** Give the user the URL that serves the app.
|
package/src/docs.js
CHANGED
|
@@ -39,18 +39,18 @@ function ok(text) {
|
|
|
39
39
|
function createDocsServer() {
|
|
40
40
|
const server = new McpServer({ name: "cloudgrid-docs", version });
|
|
41
41
|
|
|
42
|
-
// Naming cleanup (spec §6): the docs tools move to the
|
|
42
|
+
// Naming cleanup (spec §6): the docs tools move to the grid_* family. Both
|
|
43
43
|
// legacy names stay registered as deprecated aliases (same handler) so nothing
|
|
44
44
|
// breaks mid-migration; aliases are removed in a later major.
|
|
45
|
-
// search_cloudgrid_documentation →
|
|
46
|
-
// cloudgrid_quickstart_guide →
|
|
45
|
+
// search_cloudgrid_documentation → grid_search_docs
|
|
46
|
+
// cloudgrid_quickstart_guide → grid_quickstart
|
|
47
47
|
const dual = (name, alias, description, schema, handler) => {
|
|
48
48
|
server.tool(name, description, schema, handler);
|
|
49
49
|
server.tool(alias, `(deprecated: use ${name}) ${description}`, schema, handler);
|
|
50
50
|
};
|
|
51
51
|
|
|
52
52
|
dual(
|
|
53
|
-
"
|
|
53
|
+
"grid_search_docs",
|
|
54
54
|
"search_cloudgrid_documentation",
|
|
55
55
|
"Search CloudGrid documentation — guides, tutorials, CLI reference, MCP setup, and skill descriptions. Returns the most relevant doc chunks with title, snippet, and source path.",
|
|
56
56
|
{
|
|
@@ -75,7 +75,7 @@ function createDocsServer() {
|
|
|
75
75
|
);
|
|
76
76
|
|
|
77
77
|
dual(
|
|
78
|
-
"
|
|
78
|
+
"grid_quickstart",
|
|
79
79
|
"cloudgrid_quickstart_guide",
|
|
80
80
|
"Get the CloudGrid quickstart guide — the canonical build-and-ship loop from scaffold to deploy to feedback.",
|
|
81
81
|
{},
|
package/src/index.js
CHANGED
|
@@ -32,7 +32,7 @@ const server = new McpServer({ name: "cloudgrid-mcp", version });
|
|
|
32
32
|
registerTools(server, ctx);
|
|
33
33
|
|
|
34
34
|
// Capture the calling agent's clientInfo (name+version) once the MCP handshake
|
|
35
|
-
// completes, so
|
|
35
|
+
// completes, so grid_report can attribute the report's origin (which agent).
|
|
36
36
|
// getClientVersion() is populated by the SDK from the initialize request's
|
|
37
37
|
// clientInfo. Never fatal — a missing client just falls back to "unknown".
|
|
38
38
|
server.server.oninitialized = () => {
|