@cloudgrid-io/mcp
OfficialProvides an optional integration with Slack incoming webhooks to post per-session QA logs for local stdio sessions when they go live, fail, or are abandoned. The log can include the user's first message and identity details, and the integration is fully disabled unless an internal Slack webhook URL is configured.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@cloudgrid-io/mcp plug my app from ./dist and give me the live URL"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@cloudgrid-io/mcp
An MCP server for CloudGrid. It exposes the CloudGrid actions as MCP tools.
It ships in two editions from one codebase:
Local (stdio) — runs on your machine, full toolset including the CLI-wrapping tools. This README covers it. For Claude Code, Cursor, Claude Desktop.
Web (hosted HTTP) — a lighter toolset (17 direct-API tools, no CLI wrappers) for web clients like claude.ai. See REMOTE.md.
The local edition wraps the grid CLI for authenticated operations (the CLI
handles auth, grid context, and error formatting) and calls the API directly for the
plug, login, and visibility tools.
CLI compatibility
The MCP uses an installed CLI only when it meets the platform floor
(MIN_CLI_VERSION, currently 0.15.26 — kept in lockstep with the API's live
cli_compat floor, which rejects older CLIs with HTTP 426). Below the floor it
skips the local/global CLI and lazily fetches @cloudgrid-io/cli@latest via
npx instead. A CI drift guard (npm run test:drift-guard) asserts every
wrapped verb exists in the CLI help.
GRID_AUTH_STALE is out of scope
Strict-OIDC (org-owned) grids can return GRID_AUTH_STALE when the caller's
session predates an SSO policy change. The MCP does not target such grids and
does not handle this code: if a GRID_AUTH_STALE response is ever seen, point
the user at Console SSO to re-authenticate — the MCP will not silently retry.
Related MCP server: Taskade MCP Server
Prerequisite
Install and log in to the CLI:
npm install -g @cloudgrid-io/cli
grid loginThe server reads no credentials directly. It runs grid, which uses its own
stored credentials at ~/.cloudgrid/credentials.
Run
npx -y @cloudgrid-io/mcpOr from a clone:
cd mcp
npm install
npm startIt speaks MCP over stdio. Point any MCP client at the cloudgrid-mcp command.
One CloudGrid server per client
Run EITHER this local (stdio) server — standalone or via the Claude Code
plugin, which bundles it — OR the hosted connector (mcp.cloudgrid.io) in a
given client. Never both: each grid_*
tool appears twice, the two servers hold separate sign-in state (the local
edition shares the CLI's ~/.cloudgrid/credentials; the connector holds an
OAuth session), and they can disagree about whether you are signed in — the
model may then act on whichever answered last. How to tell: duplicate
grid_* entries in the client's tool list, or two CloudGrid servers in its
MCP/connector settings. Which to keep: the local edition wherever you build
runtime apps from folders (it has path + the CLI); the connector in
chat-only clients where you publish single pages.
QA session log (optional)
Set CLOUDGRID_QA_SLACK_WEBHOOK to an internal / private Slack incoming-webhook
URL to receive a per-session QA log (log-<Client>-<transport>-mcp.txt) when a
local (stdio) session goes live, fails, or is abandoned. The log carries the
user's first message (when the host forwards it) and identity details, so the
target channel MUST be internal. The hosted edition never posts a session log
at all (its servers carry no webhook); a hosted grid_note is filed with the
CloudGrid API instead — see "Privacy Policy" below. Unset → the feature is fully dark (nothing captured, nothing
posted). CLOUDGRID_QA_IDLE_MS overrides the abandoned-idle window (default
900000 = 15 min).
Tools
38 tools registered (15 shared across both editions, 23 local-only). No deprecated aliases. MIN_CLI_VERSION: 0.15.26.
Direct-API tools (both editions)
Tool | Wraps | Summary |
| API | 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. |
| API | Pull an app to continue/edit it IN PLACE — like |
| API | Collab: GET PUSH ACCESS to the SAME live entity that someone else owns — you become a collaborator on THAT entity, no... |
| API | Create a new grid (workspace) for the signed-in user — they become its admin. |
| API | Leave a one-paragraph summary of what you built this session and why, for the local edition's optional QA session log... |
| API | Plug an app, website, game, or HTML page into CloudGrid at a live public URL. |
| API | Retrieve the CURRENT deployed HTML of an inspiration/drop inline as text, so you can edit it and re-plug the SAME URL... |
| API | Change who can see a CloudGrid inspiration OR runtime app/agent. |
| API | Check whether an async runtime-app build (a deploy, which here means a plug) has finished and the app is live. |
| API | List the signed-in user's grids, each with slug, name, role, and provisioning status. |
| API | A short orientation for building with CloudGrid: the account this session is signed in as and its active grid, how to... |
| corpus | Load a specific CloudGrid workflow, template, example, rule, troubleshooting note, or reference doc by name — determi... |
| API | Report a genuine CloudGrid failure to the CloudGrid team — ONLY with the user's explicit consent. |
| API | Create a minimal hello page and plug it into the user's grid, returning the live URL. |
|
| Archive a CloudGrid inspiration. |
The direct-API tools call the platform without the CLI, so they also work in
the web edition. grid_login writes the same ~/.cloudgrid/credentials the
CLI uses, so the two share one identity.
CLI-wrapping tools (local edition only)
Tool | Wraps | Summary |
| API | Start a CLI-free CloudGrid sign-in. |
| API | Finish a sign-in started by grid_login. |
|
| Scaffold a new CloudGrid app or agent folder (cloudgrid.yaml + a web service), optionally pre-declaring resources. |
|
| Tail recent logs for an entity. |
|
| Set an entity's visibility and print its URL. |
|
| List recent feedback events for the active grid. |
|
| Show the signed-in user and active grid. |
|
| Switch the active grid. |
|
| Sign out and clear local credentials. |
|
| Grid dashboard, entity detail, or deploy snapshot. |
|
| Show metadata for a CloudGrid entity. |
| `grid get <grids | entities |
|
| Show a grid's detail: role, members, spaces, tier, wildcard-TLS state. |
|
| Continue/edit an EXISTING entity locally: download its source + cloudgrid.yaml and link the folder so your next `grid... |
|
| Rename a CloudGrid entity's display name (slug stays the same). |
|
| Take an entity off the grid. |
|
| Rollback an entity to a previous version. |
|
| List published versions for an entity. |
|
| Manage environment variables for an entity. |
|
| Set or list secret names for an entity. |
|
| Scaffold service folders declared in cloudgrid.yaml (idempotent). |
|
| Run CloudGrid diagnostics on the local environment. |
|
| Return the public URL for an entity. |
grid_share and grid_visibility overlap on purpose: grid_share
wraps the CLI and defaults to link; grid_visibility is direct API, takes an
explicit scope, and defaults its target to the session's last drop — it is the one
the web edition gets.
All tools carry MCP annotations (readOnlyHint, destructiveHint,
openWorldHint) for clients that support them.
Test
A smoke test spawns the server with a real MCP client, lists the tools, and calls
the read-only grid_feedback tool end to end:
cd mcp
npm install
npm run smokeIt needs a logged-in CLI on $PATH.
Live smoke scripts
Three more scripts run against the live API on demand. They are not part of CI. A new plug needs sign-in, so none of them creates an anonymous drop. Each one skips a step, and says why, when the variables that step needs are missing. Tokens come only from the environment and are never printed.
Script | Without secrets | With secrets |
| A signed-out create with |
|
| Same signed-out check, through the web edition. |
|
| Skips. |
|
The signed-out check is refused inside the server before any publish request is sent, so it is safe to run at any time.
Design
Shells out with
execFileand an argument array, so there is no shell and no injection surface.grid_view_logsnever uses--follow; a streaming call would never return.Stateless. Each call is one CLI invocation.
Privacy Policy
Full policy: https://cloudgrid.io/privacy
What this MCP server does with your data
Authentication. grid_login opens a browser-based Google sign-in flow via
CloudGrid's API (/auth/login). The returned JWT is stored at
~/.cloudgrid/credentials with 0600 permissions — the CLI and the MCP share
one credential file by design (auth.js:7-8). The web edition has no sign-in
tool: the AI tool's connector signs in with OAuth, and this server issues its own
short-lived access token, with the CloudGrid session sealed inside it, so the
session is never handed to the AI tool.
Deploying. grid_plug uploads your app files (HTML, source, assets) to
https://api.cloudgrid.io/api/v2/plug. Before upload, inline sources are
scanned for known API-key patterns (OpenRouter, Anthropic, OpenAI, Google,
GitHub, AWS, Slack, Stripe); a match blocks the deploy. This is not a guarantee
— a determined model can obfuscate a key past the scan — but it stops the
good-faith "embed it so it works" path. Auth headers (Bearer JWT, grid slug) are
attached to identify the caller.
Error reporting. grid_report sends an error report to
https://api.cloudgrid.io/api/v2/errors. The tool description instructs the
model to call it only with the user's explicit consent, and setting
CLOUDGRID_TELEMETRY=off disables it unconditionally — but there is no
programmatic consent check in the report handler itself. The payload includes an
error summary, diagnostic metadata (platform, Node version, transport), a flag
recording whether the user agreed to share the conversation (deploy.js:544),
and a context object the model supplies — which by its declared shape
(register.js:964-975) can carry the failing inputs (for example the HTML or
args) and the original request. The transcript itself is not sent by this tool.
The report scrub is two-layer: values AND the message field are scanned
for known secret shapes (API key prefixes such as sk-ant-, sk-proj-,
AKIA…; JWTs; PEM private-key blocks; Bearer tokens; basic-auth URL
credentials) and matches are replaced with [REDACTED]. Arbitrary or
unknown-shape secrets that do not match a known pattern still transit
unredacted. The client-side scrub (scrubReportContext + scrubSecretValues
in deploy.js) runs before the POST; the server endpoint applies a server-side
key-name filter on top. To keep a secret out of a report, do not place it in
the message or context you send, or set CLOUDGRID_TELEMETRY=off to
disable reporting entirely.
Version check. At startup the local edition makes one request to
https://registry.npmjs.org/@cloudgrid-io/mcp/latest to detect a stale .mcpb
install, which never auto-updates. It sends no account data and no user content.
The hosted edition does not do this.
QA session log. When CLOUDGRID_QA_SLACK_WEBHOOK is set (unset by default,
fully dark otherwise), the local (stdio) server posts a per-session QA log to an
internal Slack channel on deploy, error, idle timeout, or process shutdown. The
log includes: session metadata (user ID, email, grid slug, client name), the
user's first message (scrubbed, capped at 2 000 chars), a per-tool-call trail
with allowlisted arg keys only, and an optional narrative set via grid_note or
grid_plug's session_note (capped at 4 000 chars). The first message is
captured from the CLOUDGRID_USER_REQUEST environment variable (forwarded by
Claude Code) or grid_plug's user_request argument (local edition only).
The hosted edition sends nothing on its own: its grid_plug has no
user_request or session_note, and there is no post on a plug, on idle, or on
close. The one hosted post is grid_note, which the user asks for: it POSTs the
note to the CloudGrid API (/api/v2/feedback) under the user's own sign-in,
with the grid slug and the client name — no email address, no tool-call trail,
nothing else from the conversation; signed out, it returns needs_auth and
sends nothing. grid_report (both editions) sends a failure report to the
CloudGrid API only after the user agrees: the message and context the model
passes plus the client name and platform, and the conversation only when they
explicitly agree to that. Free-text values
(the first message, the narrative, tool arguments, and error messages) pass
through a scrubber that redacts JWTs, PEM keys, Bearer tokens, and known
provider API-key formats. Identity fields (_keyResult values and the header
block) and structured result data bypass the text scrubber.
No other data collection by this server. The server does not track usage
analytics or transmit data beyond the flows listed above and the authenticated
CloudGrid API calls the individual tools make (e.g. /grids,
/pickup, /deploys, /inspirations/{id}/source). CLI-wrapping tools shell
out to the CloudGrid grid CLI, which shares the same
~/.cloudgrid/credentials file and does not send additional telemetry through
this server. They prefer the CLI bundled in the .mcpb or a compatible grid
already on your PATH; if neither is present or new enough, they fall back to
npx -y @cloudgrid-io/cli@latest (cli.js:411-424), which downloads and runs
the CLI from the npm registry (registry.npmjs.org) on first use — software
installation, and the second flow that can reach npm (the startup version check
above is the first). Platform-level data handling is covered by the linked
privacy policy.
Available Tools
38 toolsgrid_check_deployCheck deploy statusARead-onlyInspect
Check whether an async runtime-app build (a deploy, which here means a plug) has finished and the app is live. Call this after grid_plug returns status "building" — repeat every ~15s until it reports success or failed, and do NOT tell the user the app is live until it does. Always pass the entity_id from the grid_plug result (or the app url): some hosts start a new session for every tool call, so the session's last plug is not always available. Pass poll_url when the grid_plug result has one. Requires sign-in (builds are owned). Calls the API directly — works on every edition, including hosted.
Inputs: url, grid, poll_url, entity_id. Returns: url, live, error, status, +4 more
grid_collabGet push access to an app you don't ownAInspect
Collab: GET PUSH ACCESS to the SAME live entity that someone else owns — you become a collaborator on THAT entity, not a copy. This grants PERMISSION ONLY and fetches nothing: after it succeeds, run grid_pull to get the code, then grid_plug (with its target_entity_id) updates the SHARED entity in place (the team sees the new version and can roll it back). This is NOT a fork — it never mints a new entity and never carries forked_from lineage; if you want your OWN separate copy instead, that is grid_pickup. If the owner GATES who may join, this does NOT dead-end: it sends the owner a request for access on your behalf, and once they approve, access is live immediately — no need to re-run grid_collab. Use this — not grid_pickup — whenever the user asks to "collab" on, "join", or "get push/write access to" an app they don't own. Requires sign-in. Calls the API directly (both editions).
Inputs: entity_id (required), grid. Returns: url, grid, slug, can_edit, +4 more
grid_create_gridCreate a new gridAInspect
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: . 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).
Inputs: slug (required), name. Returns: grid, error, created, needs_auth, +1 more
grid_create_projectScaffold a new projectAInspect
Scaffold a new CloudGrid app or agent folder (cloudgrid.yaml + a web service), optionally pre-declaring resources. Wraps grid new (scaffolds locally; no server entity until you grid_plug). Language note: the nextjs starter is TypeScript (writes tsconfig.json + app/.tsx), but CloudGrid templates are plain JavaScript. When you fill a template, treat the template's files as the source of truth — delete the scaffolded tsconfig.json and app/.tsx, then write the template's .js files. Never leave both .tsx and .js for the same route.
Inputs: kind (required), name (required), cwd, dir, +4 more.
grid_deleteDelete an entityADestructiveInspect
Archive a CloudGrid inspiration. Destructive. Wraps grid delete entity.
Inputs: name (required), confirm (required).
grid_describe_gridDescribe a gridARead-onlyInspect
Show a grid's detail: role, members, spaces, tier, wildcard-TLS state. Wraps grid describe grid <slug> --json.
Inputs: grid (required).
grid_diagnoseRun local diagnosticsBRead-onlyInspect
Run CloudGrid diagnostics on the local environment. Wraps grid doctor.
Inputs: no named parameters.
grid_edit_existing_appPull app source to edit locallyADestructiveInspect
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 — grid_collab (CLI equivalent: grid collab <entity>), which grants permission only; run the pull again once it is granted.
Inputs: name (required), cwd, grid, force, +3 more.
grid_feedbackList feedback eventsARead-onlyInspect
List recent feedback events for the active grid. Read-only. Wraps grid feedback list.
Inputs: org, grid, limit, since.
grid_getList grids, entities, or spacesCRead-onlyInspect
List CloudGrid grids, entities, or spaces. Wraps grid get <grids|entities|spaces> --json.
Inputs: resource (required), grid, kind, space, +2 more.
grid_get_app_sourceGet deployed app sourceARead-onlyInspect
Retrieve the CURRENT deployed HTML of an inspiration/drop inline as text, so you can edit it and re-plug the SAME URL when you no longer have its source in context (e.g. the user asks to 'change the color' of a page — even in a fresh chat with only its URL). Pass the entity_id from the grid_plug result or the public url (or grid+slug); the session's last drop is only a fallback. Given just a URL with no session, it resolves the entity_id via the pickup contract and also returns the entity's kind, single_html, capabilities (replug/fork), and replug_handle — read those to decide whether to edit in place (single-HTML + capabilities.replug), fall back for a multi-file app/agent (use source_download_url + the local edition/CLI), or offer a copy (grid_pickup) when it isn't yours. For a multi-file or runtime (app/agent) source, use source_download_url, or grid_pull to get the files and link the folder. Reads the HTML from the API server-side; read-only, creates nothing.
Inputs: url, grid, slug, entity_id. Returns: url, html, kind, bytes, +6 more
grid_get_templateLoad a workflow or templateARead-onlyInspect
Load a specific CloudGrid workflow, template, example, rule, troubleshooting note, or reference doc by name — deterministic retrieval from the bundled corpus, no network. Workflows and templates come from the index grid_start returns, e.g. grid_get_template({kind:"workflow", name:"presentation"}) then grid_get_template({kind:"template", name:"deck"}). Reference docs: cloudgrid-yaml (the manifest schema and needs: vocabulary), capability-map (which template fits a request), playbook (the full operating rules).
Inputs: kind (required), name (required). Returns: kind, name, content
grid_get_urlGet entity URLARead-onlyInspect
Return the public URL for an entity. Does not open a browser. Wraps grid open --print.
Inputs: name.
grid_helloPlug a hello pageAInspect
Create a minimal hello page and plug it into the user's grid, returning the live URL. If the user has more than one grid and grid is not given, this returns needs_grid with the list — ASK the user which grid, then call again with grid set. Never guess the grid. Requires sign-in.
Inputs: grid, name. Returns: url, error, entity_id, needs_auth, +1 more
grid_infoShow entity metadataCRead-onlyInspect
Show metadata for a CloudGrid entity. Wraps grid info.
Inputs: name.
grid_list_gridsList your gridsARead-onlyInspect
List the signed-in user's grids, each with slug, name, role, and provisioning status. Requires sign-in. To plug onto a brand-new grid, call grid_plug right away: it waits for the grid to be ready itself, so do not poll render_ready or wait before plugging.
Inputs: no named parameters. Returns: orgs
grid_list_versionsList entity versionsBRead-onlyInspect
List published versions for an entity. Wraps grid versions.
Inputs: name.
grid_loginSign in to CloudGridAInspect
Start a CLI-free CloudGrid sign-in. Use when the user wants to log in, sign in, or authenticate, or when a plug returned needs_auth. Returns a URL to open in the browser; then call grid_login_status to finish. Uses CloudGrid's existing OAuth.
Inputs: no named parameters. Returns: login_url
grid_login_statusCheck sign-in statusAInspect
Finish a sign-in started by grid_login. Polls once: if you have completed the browser sign-in, it saves your session; otherwise it tells you to finish and try again.
Inputs: code. Returns: email, status
grid_logoutSign outADestructiveInspect
Sign out and clear local credentials. Wraps grid logout.
Inputs: no named parameters.
grid_noteLeave a session build noteAInspect
Leave a one-paragraph summary of what you built this session and why, for the local edition's optional QA session log, which the CloudGrid team reads. Call it BEFORE a plug, or in a session that ends without one — a successful plug posts the log on that same call, so pass grid_plug's session_note instead. The log is dark unless the operator of this machine has set CLOUDGRID_QA_SLACK_WEBHOOK.
Inputs: summary (required).
grid_pickupCopy an app into your gridAInspect
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 grid_collab tool (or the CLI grid collab <entity>) — so do NOT reach for grid_pickup when the user asks to collab; reach for grid_collab. To edit the ORIGINAL entity in place (as its owner or a collaborator), use grid_pull instead.
Inputs: entity_id (required), id, grid, name, +2 more. Returns: kind, name, entity_id, grid_slug, +3 more
grid_plugPlug an app into the gridADestructiveInspect
Plug an app, website, game, or HTML page into CloudGrid at a live public URL. Serves requests to deploy, publish, host, ship, launch, go live, or share a working link: "give me a link", "share it with friends", "make it live", "put it online", "host this". Pass one source: html (a self-contained page) or artifact_files (a multi-file or database-backed runtime app; cloudgrid.yaml declares its needs), or path (local folder, file, or .zip). No target_entity_id (or grid+slug) creates a new URL; with one it updates it in place. To edit a page without its HTML, call grid_get_app_source first, then deploy with target_entity_id. Signed out it returns needs_auth: call grid_login, then re-call; there is no guest publish. needs_grid: ask which grid. needs_grid_create: confirm a slug, then grid_create_grid. Never put an API key in page source. A runtime app returns building: poll grid_check_deploy until live. End with the live URL.
Inputs: url, anon, grid, html, +11 more. Returns: url, via, grid, orgs, +17 more
grid_pullPull an app to edit in placeAInspect
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 grid_collab (or the CLI 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). A drop plugged outside any grid is claimed into the grid you choose by passing its claim_token; only the drop's owner can claim it. Requires sign-in. Calls the API directly (both editions).
Inputs: grid, claim_url, entity_id, claim_token. Returns: url, grid, slug, error, +5 more
grid_renameRename an entityBInspect
Rename a CloudGrid entity's display name (slug stays the same). Wraps grid rename.
Inputs: name (required), new_name (required).
grid_reportReport a failureAInspect
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. What is sent: the short message (what failed), the context you pass (the tool, inputs, grid, original request, error code/detail), and the client name and platform — only the message and context the user agreed to send, nothing else from the conversation. 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.
Inputs: message (required), context, category, trace_id, +2 more. Returns: status
grid_rollback_deployRoll back to a previous versionCInspect
Rollback an entity to a previous version. Wraps grid rollback.
Inputs: name (required), to.
grid_scaffoldScaffold service foldersBInspect
Scaffold service folders declared in cloudgrid.yaml (idempotent). Wraps grid scaffold.
Inputs: cwd.
grid_set_envManage environment variablesCInspect
Manage environment variables for an entity. Wraps grid env.
Inputs: name (required), action (required), cwd, key, +1 more.
grid_set_secretManage secretsAInspect
Set or list secret names for an entity. Never returns secret values. Wraps grid secrets.
Inputs: name (required), action (required), cwd, key, +1 more.
grid_startOrient on CloudGridARead-onlyInspect
A short orientation for building with CloudGrid: the account this session is signed in as and its active grid, how to choose between a single-page plug and a runtime app (and what each provides: managed database, Redis, pgvector, disk, an AI gateway with no API key), the sign-in and grid steps a first plug goes through, and the index of workflows to load with grid_get_template. Read-only, under 3,000 characters; useful once per session before the first plug. The full operating playbook is grid_get_template({kind:"doc", name:"playbook"}).
Inputs: no named parameters. Returns: context, playbook, workflows
grid_statusShow grid or entity statusCRead-onlyInspect
Grid dashboard, entity detail, or deploy snapshot. Wraps grid status.
Inputs: name.
grid_switch_gridSwitch the active gridCInspect
Switch the active grid. Wraps grid use.
Inputs: org, grid.
grid_take_offlineTake an entity offlineCDestructiveInspect
Take an entity off the grid. Destructive. Wraps grid unplug.
Inputs: name (required), confirm (required).
grid_view_logsView entity logsARead-onlyInspect
Tail recent logs for an entity. Does not stream; returns a snapshot. Wraps grid logs.
Inputs: name, tail, since.
grid_visibilityChange app visibilityADestructiveInspect
Change who can see a CloudGrid inspiration OR runtime app/agent. Simple modes: private (only the user), grid (everyone in their grid), link (anyone with the URL — add indexed: true to be findable by search engines). Finer control via the TWO AXES instead: inside (who in the grid: private | spaces | grid) and outside (reach beyond it: none | link | public), with require_signin for a members-only link and spaces for selected spaces. 'authenticated' is retired (it maps to a sign-in-required link). Use when the user wants to make something private, restrict who sees it, or open it up. Pass the app's entity_id (from the grid_plug result) or its url: some hosts start a new session for every tool call, so the drop made earlier in the conversation is only a fallback. Kind-aware routing across both surfaces. Requires sign-in. Calls the API directly.
Inputs: org, url, grid, kind, +8 more. Returns: url, visibility, share_scope, link_indexed, +3 more
grid_whoamiShow current user and gridBRead-onlyInspect
Show the signed-in user and active grid. Wraps grid whoami.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 38 tools
Several tools overlap heavily: grid_pull and grid_edit_existing_app both wrap `grid pull`; grid_share and grid_visibility both set visibility; and grid_get, grid_info, grid_status, grid_describe_grid, grid_list_grids, and grid_whoami all read entity/grid metadata with fuzzy boundaries. grid_hello is a special-case grid_plug, and grid_note vs grid_report both report information, so the long descriptions are compensating for genuinely confusable tools.
Nearly everything uses a predictable grid_ snake_case prefix with verb_noun or verb form (grid_create_grid, grid_list_versions, grid_check_deploy, grid_rollback_deploy). A few names are vague verbs (grid_get, grid_info, grid_status) and some are noun-style (grid_whoami, grid_pickup, grid_collab), but overall the pattern is readable and consistent.
38 tools is well above the comfortable range and includes redundant pairs (grid_pull/grid_edit_existing_app, grid_share/grid_visibility) that inflate the surface. While the platform's domain is genuinely broad (deploy, auth, env, secrets, versions, grids, templates), the count is heavy enough to burden selection.
Coverage spans auth, grid management, scaffolding, plugging/deploying, versioning/rollback, env and secrets, visibility, logs, diagnostics, and feedback, leaving few obvious dead ends. Minor gaps exist around entity deletion (only archive) and env variable removal, but agents can generally complete the lifecycle.
Maintenance
Related MCP Connectors
327 dev tools via REST API and MCP. Generate Dockerfiles, schemas, K8s, APIs, and more.
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables Kubernetes-native management of agent/model workloads via MCP tools, including fleet status, workload lifecycle, and boot orchestration for AI workflows.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI clients such as Claude, Cursor, VS Code, and Windsurf to list and manage workspaces, projects, tasks, AI agents, and automations through a hosted OAuth-secured endpoint or a local stdio package. Also generates MCP tools from any OpenAPI spec.2,105 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI clients to discover, inspect, and run 2,000+ models and APIs through an authenticated local MCP bridge, with OAuth sign-in and rollback support.556,724 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI clients such as Claude, Cursor, VS Code, and Windsurf to manage workspaces, projects, tasks, and AI agents through natural language, using a hosted OAuth-authenticated endpoint or a local stdio package. It also ships an OpenAPI codegen tool for generating MCP tools from any OpenAPI spec.2,105 npmMIT