@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.
Files changed (135) hide show
  1. package/README.md +39 -39
  2. package/package.json +1 -1
  3. package/src/corpus/capability-map.md +15 -9
  4. package/src/corpus/cloudgrid-yaml.md +10 -8
  5. package/src/corpus/cookbook.md +4 -4
  6. package/src/corpus/install-for-agents.md +1 -2
  7. package/src/corpus/install.md +1 -1
  8. package/src/corpus/rules/publish-fallbacks.md +1 -1
  9. package/src/corpus/skill-claim.md +1 -1
  10. package/src/corpus/skill-login.md +2 -2
  11. package/src/corpus/skill-plug.md +69 -6
  12. package/src/corpus/skills-readme.md +10 -10
  13. package/src/corpus/templates/ai-knowledge-base/AGENTS.md +1 -1
  14. package/src/corpus/templates/ai-knowledge-base/index.md +1 -1
  15. package/src/corpus/templates/api-docs/README.md +3 -3
  16. package/src/corpus/templates/api-docs/index.md +3 -4
  17. package/src/corpus/templates/appointment-booking/AGENTS.md +9 -9
  18. package/src/corpus/templates/appointment-booking/index.md +6 -6
  19. package/src/corpus/templates/approval-workflow/AGENTS.md +2 -2
  20. package/src/corpus/templates/approval-workflow/index.md +2 -2
  21. package/src/corpus/templates/billing-dashboard/index.md +1 -1
  22. package/src/corpus/templates/calendar-scheduler/AGENTS.md +1 -1
  23. package/src/corpus/templates/calendar-scheduler/index.md +1 -1
  24. package/src/corpus/templates/changelog/README.md +3 -3
  25. package/src/corpus/templates/changelog/index.md +3 -4
  26. package/src/corpus/templates/company-website/README.md +3 -4
  27. package/src/corpus/templates/company-website/cloudgrid.yaml +1 -1
  28. package/src/corpus/templates/company-website/index.md +3 -4
  29. package/src/corpus/templates/course-platform/index.md +1 -1
  30. package/src/corpus/templates/dashboard/cloudgrid.yaml +1 -1
  31. package/src/corpus/templates/dashboard/index.md +3 -4
  32. package/src/corpus/templates/deck/cloudgrid.yaml +1 -1
  33. package/src/corpus/templates/deck/index.md +3 -4
  34. package/src/corpus/templates/docs-site/README.md +3 -3
  35. package/src/corpus/templates/docs-site/index.md +3 -4
  36. package/src/corpus/templates/forum/AGENTS.md +6 -6
  37. package/src/corpus/templates/forum/index.md +1 -1
  38. package/src/corpus/templates/hr-portal/index.md +1 -1
  39. package/src/corpus/templates/internal-tools-portal/index.md +1 -1
  40. package/src/corpus/templates/landing-page/cloudgrid.yaml +1 -1
  41. package/src/corpus/templates/landing-page/index.md +3 -4
  42. package/src/corpus/templates/lms/index.md +1 -1
  43. package/src/corpus/templates/marketplace/AGENTS.md +1 -1
  44. package/src/corpus/templates/marketplace/index.md +1 -1
  45. package/src/corpus/templates/membership-site/AGENTS.md +9 -9
  46. package/src/corpus/templates/membership-site/index.md +6 -6
  47. package/src/corpus/templates/online-store/index.md +1 -1
  48. package/src/corpus/templates/portfolio/README.md +3 -3
  49. package/src/corpus/templates/portfolio/index.md +3 -4
  50. package/src/corpus/templates/product-launch/README.md +3 -4
  51. package/src/corpus/templates/product-launch/cloudgrid.yaml +1 -1
  52. package/src/corpus/templates/product-launch/index.md +3 -4
  53. package/src/corpus/templates/report/cloudgrid.yaml +1 -1
  54. package/src/corpus/templates/report/index.md +3 -4
  55. package/src/corpus/templates/restaurant-reservations/AGENTS.md +9 -9
  56. package/src/corpus/templates/restaurant-reservations/index.md +2 -2
  57. package/src/corpus/templates/saas-marketing/README.md +3 -3
  58. package/src/corpus/templates/saas-marketing/index.md +3 -4
  59. package/src/corpus/templates/status-page/README.md +3 -3
  60. package/src/corpus/templates/status-page/index.md +3 -4
  61. package/src/corpus/templates/subscription-management/AGENTS.md +9 -9
  62. package/src/corpus/templates/subscription-management/index.md +6 -6
  63. package/src/corpus/templates/waitlist/README.md +3 -3
  64. package/src/corpus/templates/waitlist/index.md +3 -4
  65. package/src/corpus/templates/web-app/cloudgrid.yaml +1 -1
  66. package/src/corpus/templates/web-app/index.md +3 -4
  67. package/src/corpus/troubleshooting/deploy-errors.md +1 -1
  68. package/src/corpus/troubleshooting/persistent-apps.md +1 -1
  69. package/src/corpus/usage.md +3 -3
  70. package/src/corpus/workflows/admin-dashboard.md +6 -6
  71. package/src/corpus/workflows/ai-app.md +8 -8
  72. package/src/corpus/workflows/ai-knowledge-base.md +6 -6
  73. package/src/corpus/workflows/analytics-dashboard.md +6 -6
  74. package/src/corpus/workflows/api-dashboard.md +6 -6
  75. package/src/corpus/workflows/api-docs.md +3 -3
  76. package/src/corpus/workflows/api-service.md +8 -8
  77. package/src/corpus/workflows/app-with-data.md +8 -8
  78. package/src/corpus/workflows/appointment-booking.md +8 -8
  79. package/src/corpus/workflows/approval-workflow.md +6 -6
  80. package/src/corpus/workflows/billing-dashboard.md +8 -8
  81. package/src/corpus/workflows/blog-cms.md +6 -6
  82. package/src/corpus/workflows/booking-system.md +7 -7
  83. package/src/corpus/workflows/calendar-scheduler.md +6 -6
  84. package/src/corpus/workflows/changelog.md +3 -3
  85. package/src/corpus/workflows/company-website.md +4 -4
  86. package/src/corpus/workflows/course-platform.md +7 -7
  87. package/src/corpus/workflows/crm.md +7 -7
  88. package/src/corpus/workflows/dashboard.md +4 -4
  89. package/src/corpus/workflows/directory.md +6 -6
  90. package/src/corpus/workflows/docs-site.md +3 -3
  91. package/src/corpus/workflows/erp.md +7 -7
  92. package/src/corpus/workflows/event-board.md +6 -6
  93. package/src/corpus/workflows/expense-tracker.md +6 -6
  94. package/src/corpus/workflows/feature-request-board.md +6 -6
  95. package/src/corpus/workflows/financial-dashboard.md +6 -6
  96. package/src/corpus/workflows/forum.md +7 -7
  97. package/src/corpus/workflows/hr-portal.md +7 -7
  98. package/src/corpus/workflows/internal-tools-portal.md +7 -7
  99. package/src/corpus/workflows/inventory.md +6 -6
  100. package/src/corpus/workflows/invoice.md +6 -6
  101. package/src/corpus/workflows/job-board.md +6 -6
  102. package/src/corpus/workflows/kanban.md +7 -7
  103. package/src/corpus/workflows/landing-page.md +4 -4
  104. package/src/corpus/workflows/lms.md +7 -7
  105. package/src/corpus/workflows/marketplace.md +6 -6
  106. package/src/corpus/workflows/membership-site.md +8 -8
  107. package/src/corpus/workflows/monitoring-dashboard.md +6 -6
  108. package/src/corpus/workflows/online-store.md +8 -8
  109. package/src/corpus/workflows/portfolio.md +3 -3
  110. package/src/corpus/workflows/presentation.md +4 -4
  111. package/src/corpus/workflows/product-catalog.md +6 -6
  112. package/src/corpus/workflows/product-launch.md +4 -4
  113. package/src/corpus/workflows/project-management.md +6 -6
  114. package/src/corpus/workflows/property-listings.md +6 -6
  115. package/src/corpus/workflows/quiz-platform.md +6 -6
  116. package/src/corpus/workflows/report.md +4 -4
  117. package/src/corpus/workflows/restaurant-reservations.md +7 -7
  118. package/src/corpus/workflows/revenue-dashboard.md +6 -6
  119. package/src/corpus/workflows/saas-marketing.md +3 -3
  120. package/src/corpus/workflows/semantic-search.md +7 -7
  121. package/src/corpus/workflows/status-page.md +3 -3
  122. package/src/corpus/workflows/subscription-management.md +8 -8
  123. package/src/corpus/workflows/task-manager.md +6 -6
  124. package/src/corpus/workflows/ticket-system.md +6 -6
  125. package/src/corpus/workflows/time-tracking.md +6 -6
  126. package/src/corpus/workflows/travel-booking.md +7 -7
  127. package/src/corpus/workflows/waitlist.md +3 -3
  128. package/src/corpus/workflows/web-app.md +4 -4
  129. package/src/docs.js +5 -5
  130. package/src/index.js +1 -1
  131. package/src/tools.js +329 -734
  132. package/src/web.js +2 -2
  133. package/src/widgets/live-result.html +1 -1
  134. package/src/widgets/org-picker.html +3 -3
  135. 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 -> gridctl_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"
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: `gridctl_login_status`; if not, `gridctl_login`.
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
- `gridctl_init` an app `<name>` FIRST — it creates the entity +
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
- `gridctl_fetch("template", "semantic-search")`. Read **`AGENTS.md`** before
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
- `gridctl_env`. Do NOT set `DATABASE_MONGODB_URL` yourself — the grid injects it.
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 `gridctl_plug`. A **runtime deploy is ASYNC**: the first
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 `gridctl_status` (or the returned poll_url) until the entity is live.
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 gridctl_drop.
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 `gridctl_fetch("template", "status-page")` to load
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 `gridctl plug`.
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: `gridctl_login_status`; if not, `gridctl_login`.
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
- - `gridctl_fetch("template", "subscription-management")` — the `cloudgrid.yaml` +
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
- - `gridctl_fetch("template", "app-with-data")` — the proven Next.js + Mongo
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
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
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 → `gridctl_secrets` (set the vault items `stripe-live-key` and
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) → `gridctl_env` / `services.web.env`.
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 `gridctl_plug`. A **runtime deploy is ASYNC**: the first
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 `gridctl_status` (or the returned poll_url) until the entity is live.
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: `gridctl_login_status`; if not, `gridctl_login`.
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
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
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
- `gridctl_fetch("template", "task-manager")`. It is a minimal, real Next.js +
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 → `gridctl_secrets`. Non-secret config → `gridctl_env`.
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 `gridctl_plug`. A **runtime deploy is ASYNC**: the first
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 `gridctl_status` (or the returned poll_url) until the entity is live.
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: `gridctl_login_status`; if not, `gridctl_login`.
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
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
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
- `gridctl_fetch("template", "ticket-system")`. It is a minimal, real Next.js +
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 → `gridctl_secrets`. Non-secret config → `gridctl_env`.
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 `gridctl_plug`. A **runtime deploy is ASYNC**: the first
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 `gridctl_status` (or the returned poll_url) until the entity is live.
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: `gridctl_login_status`; if not, `gridctl_login`.
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
- `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
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
- `gridctl_fetch("template", "time-tracking")`. It is a minimal, real Next.js +
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 → `gridctl_secrets`. Non-secret config → `gridctl_env`.
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 `gridctl_plug`. A **runtime deploy is ASYNC**: the first
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 `gridctl_status` (or the returned poll_url) until the entity is live.
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: `gridctl_login_status`; if not, `gridctl_login`.
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: `gridctl_fetch("template", "travel-booking")`. **Read its
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. `gridctl_init` an app `<name>`. `init` creates the entity + `.cloudgrid/link.json`
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 `gridctl_secrets` (e.g.
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 → `gridctl_env`.
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 `gridctl_plug`. A **runtime deploy is ASYNC**: the first
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 `gridctl_status` (or the returned poll_url) until the entity is live.
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 gridctl_drop.
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 `gridctl_fetch("template", "waitlist")` to load
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 `gridctl plug`.
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 gridctl_drop.
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 `gridctl_fetch("template", "web-app")` to load
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 `gridctl_fetch("example", "web-app")`
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 `gridctl plug`.
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 gridctl_* family. Both
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 → gridctl_search_docs
46
- // cloudgrid_quickstart_guide → gridctl_quickstart
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
- "gridctl_search_docs",
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
- "gridctl_quickstart",
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 gridctl_report can attribute the report's origin (which agent).
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 = () => {