@cloudgrid-io/mcp 0.20.53 → 0.20.55

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 (69) hide show
  1. package/README.md +75 -0
  2. package/package.json +5 -3
  3. package/src/corpus/playbook.md +2 -2
  4. package/src/corpus/templates/_cloudgrid.yaml.reference +1 -1
  5. package/src/corpus/templates/admin-dashboard/cloudgrid.yaml +1 -1
  6. package/src/corpus/templates/ai-app/cloudgrid.yaml +1 -1
  7. package/src/corpus/templates/ai-knowledge-base/cloudgrid.yaml +1 -1
  8. package/src/corpus/templates/analytics-dashboard/cloudgrid.yaml +1 -1
  9. package/src/corpus/templates/api-dashboard/cloudgrid.yaml +1 -1
  10. package/src/corpus/templates/api-docs/cloudgrid.yaml +1 -1
  11. package/src/corpus/templates/api-service/cloudgrid.yaml +1 -1
  12. package/src/corpus/templates/app-with-data/cloudgrid.yaml +1 -1
  13. package/src/corpus/templates/appointment-booking/cloudgrid.yaml +1 -1
  14. package/src/corpus/templates/approval-workflow/cloudgrid.yaml +1 -1
  15. package/src/corpus/templates/billing-dashboard/cloudgrid.yaml +1 -1
  16. package/src/corpus/templates/blog-cms/cloudgrid.yaml +1 -1
  17. package/src/corpus/templates/booking-system/cloudgrid.yaml +1 -1
  18. package/src/corpus/templates/calendar-scheduler/cloudgrid.yaml +1 -1
  19. package/src/corpus/templates/changelog/cloudgrid.yaml +1 -1
  20. package/src/corpus/templates/company-website/cloudgrid.yaml +1 -1
  21. package/src/corpus/templates/course-platform/cloudgrid.yaml +1 -1
  22. package/src/corpus/templates/crm/cloudgrid.yaml +1 -1
  23. package/src/corpus/templates/dashboard/cloudgrid.yaml +1 -1
  24. package/src/corpus/templates/deck/cloudgrid.yaml +1 -1
  25. package/src/corpus/templates/directory/cloudgrid.yaml +1 -1
  26. package/src/corpus/templates/docs-app/package.json +1 -1
  27. package/src/corpus/templates/docs-site/cloudgrid.yaml +1 -1
  28. package/src/corpus/templates/erp/cloudgrid.yaml +1 -1
  29. package/src/corpus/templates/event-board/cloudgrid.yaml +1 -1
  30. package/src/corpus/templates/expense-tracker/cloudgrid.yaml +1 -1
  31. package/src/corpus/templates/feature-request-board/cloudgrid.yaml +1 -1
  32. package/src/corpus/templates/financial-dashboard/cloudgrid.yaml +1 -1
  33. package/src/corpus/templates/forum/cloudgrid.yaml +1 -1
  34. package/src/corpus/templates/hr-portal/cloudgrid.yaml +1 -1
  35. package/src/corpus/templates/internal-tools-portal/cloudgrid.yaml +1 -1
  36. package/src/corpus/templates/inventory/cloudgrid.yaml +1 -1
  37. package/src/corpus/templates/invoice/cloudgrid.yaml +1 -1
  38. package/src/corpus/templates/job-board/cloudgrid.yaml +1 -1
  39. package/src/corpus/templates/kanban/cloudgrid.yaml +1 -1
  40. package/src/corpus/templates/landing-page/cloudgrid.yaml +1 -1
  41. package/src/corpus/templates/lms/cloudgrid.yaml +1 -1
  42. package/src/corpus/templates/marketplace/cloudgrid.yaml +1 -1
  43. package/src/corpus/templates/membership-site/cloudgrid.yaml +1 -1
  44. package/src/corpus/templates/monitoring-dashboard/cloudgrid.yaml +1 -1
  45. package/src/corpus/templates/multi-service/cloudgrid.yaml +1 -1
  46. package/src/corpus/templates/online-store/cloudgrid.yaml +1 -1
  47. package/src/corpus/templates/portfolio/cloudgrid.yaml +1 -1
  48. package/src/corpus/templates/product-catalog/cloudgrid.yaml +1 -1
  49. package/src/corpus/templates/product-launch/cloudgrid.yaml +1 -1
  50. package/src/corpus/templates/project-management/cloudgrid.yaml +1 -1
  51. package/src/corpus/templates/property-listings/cloudgrid.yaml +1 -1
  52. package/src/corpus/templates/quiz-platform/cloudgrid.yaml +1 -1
  53. package/src/corpus/templates/report/cloudgrid.yaml +1 -1
  54. package/src/corpus/templates/restaurant-reservations/cloudgrid.yaml +1 -1
  55. package/src/corpus/templates/revenue-dashboard/cloudgrid.yaml +1 -1
  56. package/src/corpus/templates/saas-marketing/cloudgrid.yaml +1 -1
  57. package/src/corpus/templates/semantic-search/cloudgrid.yaml +1 -1
  58. package/src/corpus/templates/simple-semantic-search/cloudgrid.yaml +1 -1
  59. package/src/corpus/templates/status-page/cloudgrid.yaml +1 -1
  60. package/src/corpus/templates/subscription-management/cloudgrid.yaml +1 -1
  61. package/src/corpus/templates/task-manager/cloudgrid.yaml +1 -1
  62. package/src/corpus/templates/ticket-system/cloudgrid.yaml +1 -1
  63. package/src/corpus/templates/time-tracking/cloudgrid.yaml +1 -1
  64. package/src/corpus/templates/travel-booking/cloudgrid.yaml +1 -1
  65. package/src/corpus/templates/waitlist/cloudgrid.yaml +1 -1
  66. package/src/corpus/templates/web-app/cloudgrid.yaml +1 -1
  67. package/src/session-logger.js +4 -1
  68. package/src/tools/deploy.js +205 -44
  69. package/src/tools/register.js +11 -8
@@ -132,7 +132,7 @@ export function registerTools(server, ctx) {
132
132
  "grid_pickup",
133
133
  {
134
134
  title: "Copy an app into your grid",
135
- description: "Pick up an app: make your OWN COPY of any app you can see (like a git fork) into a grid you can build in. It mints a NEW entity with lineage back to the source and WITHOUT the source's secrets (set your own before you plug). Plugging your copy creates/updates YOUR entity — the original is never touched. Requires sign-in. To edit the ORIGINAL entity in place (as its owner or a collaborator), use grid_pull instead.",
135
+ description: "Pick up an app: make your OWN COPY of any app you can see (like a git fork) into a grid you can build in. It mints a NEW entity with lineage back to the source and WITHOUT the source's secrets (set your own before you plug). Plugging your copy creates/updates YOUR entity — the original is never touched. Requires sign-in. This is a FORK, not a \"collab\": it never grants you access to anyone else's live entity. Getting PUSH ACCESS to the SAME entity is a different operation — the CLI command `grid collab <entity>` — so do NOT reach for grid_pickup when the user asks to collab. To edit the ORIGINAL entity in place (as its owner or a collaborator), use grid_pull instead.",
136
136
  inputSchema: {
137
137
  entity_id: z.string().describe("The source app to copy: a canonical UUID or <grid-slug>/<entity-slug>."),
138
138
  grid: z.string().optional().describe("Grid to create your copy in. Required only when you belong to more than one grid."),
@@ -172,7 +172,7 @@ export function registerTools(server, ctx) {
172
172
  "grid_pull",
173
173
  {
174
174
  title: "Pull an app to edit in place",
175
- description: "Pull an app to continue/edit it IN PLACE — like `git clone` of the SAME entity: your next grid_plug (with its target_entity_id) updates that entity, and the team sees the new version. Requires PUSH ACCESS: you must own it or be a collaborator. If you can only view it, you CANNOT edit or plug it — say so and tell the user they can make their own copy with grid_pickup, or request collaborator access with the CLI `grid collab <entity>` (rolling out soon). Passing an anonymous drop's `claim_token` claims it into your account. Requires sign-in. Calls the API directly (both editions).",
175
+ description: "Pull an app to continue/edit it IN PLACE — like `git clone` of the SAME entity: your next grid_plug (with its target_entity_id) updates that entity, and the team sees the new version. Requires PUSH ACCESS: you must own it or be a collaborator. If you can only view it, you CANNOT edit or plug it — say so, and offer the two real options: (1) make your own separate copy (a fork) with grid_pickup, or (2) GET push access to the SAME entity with the CLI command `grid collab <entity>` — \"collab\" is a distinct access-control operation that grants permission only and fetches nothing, so once it is granted you run grid_pull again to get the code (and if the owner gates access, `grid collab` becomes a request they approve). Passing an anonymous drop's `claim_token` claims it into your account. Requires sign-in. Calls the API directly (both editions).",
176
176
  inputSchema: {
177
177
  entity_id: z.string().optional().describe("The entity id to pull. Defaults to this session's last anonymous drop."),
178
178
  claim_token: z.string().optional().describe("Anonymous drop only: its owner token — claims that drop into your account (ownership transfer)."),
@@ -205,13 +205,14 @@ export function registerTools(server, ctx) {
205
205
  "grid_create_grid",
206
206
  {
207
207
  title: "Create a new grid",
208
- description: "Create a new grid (workspace) for the signed-in user — they become its admin. Use when the account has no grid yet (grid_plug returns needs_grid_create, or a plug fails with NO_ACTIVE_ORG): suggest a short slug from the user's name or app, CONFIRM it with the user (the slug is permanent and appears in URLs), create, then re-call grid_plug with grid: <slug>. Never send the user to the console to create a grid by hand. Requires sign-in. Calls the API directly (both editions).",
208
+ description: "Create a new grid (workspace) for the signed-in user — they become its admin. Use when the account has no grid yet (grid_plug returns needs_grid_create, or a plug fails with NO_ACTIVE_ORG): suggest a short slug from the user's name or app, CONFIRM it with the user (the slug is permanent and appears in URLs), create, then call grid_plug with grid: <slug>. A brand-new grid provisions in the background (~30s); grid_plug waits for readiness before deploying, so call it right away — no manual delay or polling needed. Never send the user to the console to create a grid by hand. Requires sign-in. Calls the API directly (both editions).",
209
209
  inputSchema: {
210
210
  slug: z.string().describe("The grid slug: 3-40 lowercase letters, digits, or hyphens, starting with a letter. Permanent — confirm with the user before creating."),
211
211
  name: z.string().optional().describe("Display name (defaults to the slug)."),
212
212
  },
213
213
  outputSchema: {
214
214
  created: z.boolean().optional().describe("True when the grid was created."),
215
+ provisioning: z.boolean().optional().describe("True when the grid is still finishing setup in the background. grid_plug waits for readiness before deploying, so call it right away — no manual polling needed."),
215
216
  grid: z.object({
216
217
  slug: z.string().describe("The new grid's slug — pass it to grid_plug as `grid`."),
217
218
  name: z.string().optional().describe("Its display name."),
@@ -956,7 +957,7 @@ export function registerTools(server, ctx) {
956
957
  {
957
958
  title: "Report a failure",
958
959
  description:
959
- "Report a genuine CloudGrid failure to the CloudGrid team — ONLY with the user's explicit consent. When a build/deploy or platform call fails unexpectedly, ASK the user first; call this only after they say yes. Send a short `message` (what failed) plus `context` (the tool, inputs, grid, original request, error code/detail). By default it does NOT include the conversation — set include_conversation:true ONLY if the user explicitly agreed to send the chat. Obvious secrets in context are scrubbed before sending. Never sends anything the user didn't agree to.",
960
+ "Report a genuine CloudGrid failure to the CloudGrid team — ONLY with the user's explicit consent. When a build/deploy or platform call fails unexpectedly, ASK the user first; call this only after they say yes. Send a short `message` (what failed) plus `context` (the tool, inputs, grid, original request, error code/detail). By default it does NOT include the conversation — set include_conversation:true ONLY if the user explicitly agreed to send the chat. Redaction is key-name-only: a value is dropped only when its KEY looks secret, so a secret embedded in a value (e.g. inside HTML) is NOT redacted — do not put secrets in `message` or `context`. Never sends anything the user didn't agree to.",
960
961
  inputSchema: {
961
962
  message: z
962
963
  .string()
@@ -964,7 +965,7 @@ export function registerTools(server, ctx) {
964
965
  context: z
965
966
  .object({
966
967
  tool: z.string().optional().describe("The CloudGrid tool that failed, e.g. grid_plug."),
967
- inputs: z.any().optional().describe("The failing inputs (e.g. the HTML/args). Keep it minimal; secrets are scrubbed."),
968
+ inputs: z.any().optional().describe("The failing inputs (e.g. the HTML/args). Keep it minimal and do NOT include secrets — a secret embedded in a value here is not redacted."),
968
969
  grid: z.string().optional().describe("The grid/org slug involved, if any."),
969
970
  original_request: z.string().optional().describe("What the user asked for, in one line."),
970
971
  error_code: z.string().optional().describe("The server error code, e.g. INTERNAL_ERROR."),
@@ -972,7 +973,7 @@ export function registerTools(server, ctx) {
972
973
  })
973
974
  .partial()
974
975
  .optional()
975
- .describe("The failed-request context. Secret-looking values are scrubbed client-side and again server-side."),
976
+ .describe("The failed-request context. Redaction is key-name-only (a value is dropped only when its KEY looks secret) client-side, and the server applies the same key-name filter — a secret embedded in a value is not redacted by either."),
976
977
  include_conversation: z
977
978
  .boolean()
978
979
  .optional()
@@ -1205,11 +1206,13 @@ export function registerTools(server, ctx) {
1205
1206
  // source + cloudgrid.yaml and links the folder, so the next `grid plug` updates
1206
1207
  // the SAME entity in place. Wraps `grid pull` (NOT `grid pickup` — pickup now
1207
1208
  // makes a separate copy). Push access required; a view-only entity can't be
1208
- // pulled — use grid_pickup to copy it, or `grid collab` to request access.
1209
+ // pulled — use grid_pickup to fork a copy, or the CLI `grid collab` to GET
1210
+ // push access to the same entity (grants permission only — pull again once
1211
+ // granted). `grid collab` is CLI-only; there is no grid_collab MCP tool.
1209
1212
  regTool(
1210
1213
  "grid_edit_existing_app",
1211
1214
  "Pull app source to edit locally",
1212
- "Continue/edit an EXISTING entity locally: download its source + cloudgrid.yaml and link the folder so your next `grid plug` updates it IN PLACE. Requires push access (owner or collaborator). Wraps `grid pull`. To make your own separate copy instead, use grid_pickup.",
1215
+ "Continue/edit an EXISTING entity locally: download its source + cloudgrid.yaml and link the folder so your next `grid plug` updates it IN PLACE. Requires push access (owner or collaborator). Wraps `grid pull`. To make your own separate copy (a fork) instead, use grid_pickup. To GET push access to an entity you can currently only view, that is a different operation — the CLI `grid collab <entity>`, which grants permission only; run the pull again once it is granted.",
1213
1216
  {
1214
1217
  name: z.string().describe("Entity slug or id to pull."),
1215
1218
  target_dir: z.string().optional().describe("Directory to pull into (relative to cwd). Defaults to the entity name."),