
webflow-mcp:cloud-apps
Create GitHub-source Webflow Cloud apps and monitor, troubleshoot, or manage existing apps through Webflow MCP. Use when creating a standalone or site-attached app from GitHub; identifying apps or environments; checking public URLs, domains, configuration keys, or deployed versions; diagnosing failures; changing a GitHub source, branch, or mount; provisioning environments; or previewing a deployment, retry, or rollback. Do not use for Designer/CSS variables, CLI/local-source app creation or deployment, or passing environment-variable values through MCP.
- Installs
- 198
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/webflow/webflow-skills --skill webflow-mcp:cloud-apps- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads webflow-mcp:cloud-apps automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Webflow Cloud Apps
Use data_apps_tool to create GitHub-source apps, answer operational questions,
and manage environments for Webflow Cloud apps. Start from the user's outcome,
gather only the evidence needed, and distinguish observations from conclusions.
Use the webflow-cli:cloud skill when the task requires CLI/local-source app
creation or deployment, or creating or updating environment variables.
Client-side build output is not sent to Webflow and cannot be recovered through
MCP.
Instructions
1. Establish scope
Use the Webflow MCP connection established by the user's request or existing task context. If only one connection is active, use it without asking the user to choose or reconfirm a region. If multiple connections are active and the intended target remains ambiguous, ask the user to disambiguate before proceeding with target-dependent operations. Do not switch regions to recover from missing resources or access errors.
Before handing an existing MCP app or environment to the CLI for configuration writes or deployment, compare their configured regions. If they differ, do not assume either is correct or silently retarget either tool. Resolve the intended target from explicit task context; if that does not resolve the conflict, ask the user. Pause dependent mutations until the conflict is resolved.
Once the intended region is established, verify that the CLI can read the exact MCP app and environment IDs, and carry that region and those IDs explicitly into subsequent mutations. Login status or a region label alone is insufficient. If verification fails, report the failure without inferring its cause and pause dependent mutations. Continue independent work whose target is established.
- Call
webflow_guide_toolbefore any other Webflow MCP tool. The live guide and action schemas are authoritative for current arguments and responses. - Use Webflow MCP tools for Webflow operations except the explicit CLI handoff for environment-variable values. Never call Webflow APIs directly.
- Include the required
contextparameter in every tool call. Write 15-25 words in third-person perspective. - Route by the capability the task requires:
- Use
data_apps_toolto create GitHub-source apps; inspect apps, environments, domains, deployment records, logs, and variable metadata; manage GitHub sources and environments; and enqueue GitHub deployments. - Use
data_variable_toolfor Designer color, size, font, and CSS variables. - Use
webflow-cli:cloudfor CLI/local-source apps, local builds and deployments, or creating and updating environment-variable values.
- Use
- If
data_apps_toolis unavailable, report that the Cloud Apps MCP capability is not enabled. Do not bypass it with a direct API request.
Never ask the user to paste an environment-variable value or secret into chat.
For a create or update, delegate to webflow-cli:cloud and require a hidden
prompt, stdin, or protected file. Never pass a secret as a positional argument.
2. Resolve the target
Discover identifiers in this order:
list_apps -> app_id
list_environments(app_id) -> env_id
list_deployments(app_id, env_id) -> deployment_id
App names are unique only within a site, so resolve a named app with
site_id + name. If multiple resources match, present distinguishing metadata
and require the user to select one before any mutation. Use the live guide for
filter, pagination, cursor, and action-batching mechanics.
3. Follow the matching user story
Create a GitHub-source app
- Establish the app name, canonical GitHub repository URL, branch, optional description, and whether it is standalone or attached to an existing site.
- For a site-attached app, resolve the site ID. Omit
site_idfor standalone. - Apply the mount contract before previewing:
- A standalone app always mounts at
/; omitmountor use/. - A site-attached app defaults to
/app, rejects/, and requires a valid non-root mount when overriding the default.
- A standalone app always mounts at
- Explain that standalone creation requires a workspace-scoped user token. Webflow derives the GitHub installation and validates repository access; do not request an installation ID.
- Call
create_appwith its default dry run. Show the repository, branch, attachment, site when applicable, mount, and initial-deployment attempt. - Require
confirm. Immediately after confirmation and before execution, record the start time and generate one stableidempotency_key; execute withdry_run: false, then record the completion time. Reuse that key only for exact retries of this creation. - Treat creation and initial deployment as separate outcomes. A returned app
means creation succeeded even if
deployStatusisskippedorfailed. Fortriggered, inspect the environment and deployment; forskipped, check the branch or push a commit; forfailed, preserve the app and inspect or retry deployment separately. - If the app or outcome is unreadable, reconcile before retrying:
- For a site-attached app, collect candidates with
site_id + name; for a standalone app, collect candidates by name. - In both cases, compare each candidate's name,
sourceUrl, andcreatedAtwith the requested repository and recorded execution window. - Continue to environments and deployments only when exactly one candidate matches. Do not retry while the created app remains ambiguous.
- For a site-attached app, collect candidates with
- Never delete a created app automatically because deployment failed. Do not treat an initial deployment dashboard link as the environment's public URL.
Which app and environment am I looking at?
- Use
list_appsto find the app andget_appfor its metadata, includingsourceUrlandsiteAttached. - Use
list_environmentsto report the branch, mount,publicUrl, and latest deployment status. IfpublicUrlis null, report that no user-facing environment address is available; do not construct one. - Use
get_app_domainswhen the user asks where the app is reachable. - Explain that custom-domain results exclude the default
*.webflow.iohostname. Domains for an app attached to a regular Webflow site may belong to the parent site and be shared by sibling apps.
What is deployed, and is it healthy?
- Use
list_environmentsfor the environment's latest deployment status. - Use
list_deployments, newest first, thenget_deploymentfor the selected deployment's detailed timeline and version metadata. - Treat
starting,building, anddeployingas active states. Report any other status exactly rather than guessing its meaning. - A failed phase sets
buildFailedAtordeployFailedAtwhile its matching finished timestamp remains null. A null finished timestamp by itself does not prove the phase is still running. - Report what is observable: selected app and environment, deployment status, version or commit metadata if returned, phase timestamps, and evidence gaps.
Why did the deployment fail?
- Fetch the deployment with
get_deploymentand identify the failed phase from its status and timestamps. - Call
get_build_logsonly whenlogsAvailableis true. Start with a narrowsincewindow orqfilter, then broaden only if needed. - Page until
nextCursoris null when a complete result is required. - Treat
logsAvailableas a retention and retrieval signal, not proof that every phase produced log entries. - Treat an empty result as "no matching retrievable server-side logs," not as proof that the build succeeded or produced no errors.
- Build output produced on a user's machine is outside MCP. Mention this only when the user says the deployment was built with the CLI; direct them to the originating CLI output for local build failures.
- Report the failed phase, relevant timestamps, the smallest useful evidence, the inferred cause, and any uncertainty. Do not merely restate raw logs.
Why is the running app failing?
- Resolve the exact environment and call
get_runtime_logs. - Narrow by
sinceandqbefore retrieving a broad window. Page completely when the conclusion depends on absence. - Runtime logs may be unavailable because of retention. Treat an empty result as no retrievable logs and report the limitation.
- Correlate runtime evidence with the latest deployment record when useful, but do not claim causation from timing alone.
- Report the observed error pattern, affected interval, likely cause, evidence, and limitations.
Is required configuration present?
- Establish the required key set from an authoritative source: a user-provided key list, a project configuration schema or documented requirement, or a reference environment the user explicitly designates as complete.
- If the source is a protected file containing values, run deterministic key-only extraction locally and emit only key names. Never open the source through a model-visible read or include its values in chat or tool output.
- Obtain an authoritative secrecy designation for every required key from the
user, a project schema or documented requirement, or a reference environment
explicitly designated as authoritative for secrecy. An
.envfile or plain key list establishes names only; never infer secrecy from key names. - Resolve the environment, call
list_variables, and compare its keys and secrecy metadata with the established requirements. It proves what is configured, not what is required. Exhaust pagination before concluding that a key is missing. - Report keys and metadata only. Secret entries have
isSecret: trueand no value; a missing secret value is expected. - If the required set or any secrecy designation is unresolved, stop before a CLI mutation or dependent deployment unless the user explicitly establishes that no configuration is required.
- For missing or misclassified keys, route to
webflow-cli:cloudwithout requesting values in chat. After the write, verify required keys and secrecy withlist_variables. If it partially fails, report failed keys without values and stop before deployment; preserve successful keys and the environment.
Why is this environment serving the wrong branch or route?
- Resolve the exact environment and report its current branch, mount,
publicUrl, and latest deployment status. Report a nullpublicUrlwithout constructing an address. - Compare the current branch and mount with the user's intended mapping. If the request is only diagnostic, stop after reporting the mismatch.
- If the correction changes the mount, call
get_appand usesiteAttached:/is valid only when false; a site-attached app requires a non-root mount. Do not infer attachment fromsiteId. - For a correction, show the exact before-and-after mapping. Explain that
update_environmentis immediate, has no dry run, and does not deploy code. - Require
confirm, callupdate_environmentonce, and report the returned environment,publicUrl, andmountRefreshStatus. - For an unreadable or uncertain result, locate the original
env_id. If using the expected new branch as a filter, accept a returned environment only when its ID equals that originalenv_id, then compare its branch and mount with the requested values. A different ID or no uniquely matched original target is ambiguous: do not continue or retry. Never reuse the old branch filter after a branch-changing update. - A failed or unknown mount refresh does not mean the environment update was rolled back. Report routing as uncertain and do not retry solely because the refresh failed.
- If the branch changed and the user wants its code deployed, treat
trigger_deploymentas a separate previewed and confirmed mutation.
Create an isolated environment for a branch and deploy it
- Resolve the existing app, call
get_app, and validate the proposed mount withsiteAttachedbefore previewing the mutation. - Page through
list_environmentsto check whether the requested branch or mount is already in use. - Show the proposed branch and mount. Explain that
create_environmentis immediate, has no dry run, and creates a mapping without deploying code. - Generate one stable
idempotency_key, requireconfirm, and callcreate_environment. Reuse that key only for exact retries. - Report the returned environment,
publicUrl, andmountRefreshStatus. If the result is uncertain, search for the expected branch and compare the environment ID, branch, and mount; use a returned ID to distinguish concurrent creations. Do not retry while the created environment remains ambiguous. - A failed refresh means creation succeeded but routing may be incomplete. Do not retry creation or delete the environment automatically.
- Before deploying this new environment, follow "Is required configuration present?" as a mandatory gate. Continue only after requirements and secrecy are verified, or the user explicitly establishes that none are required. Then use the deployment workflow below for preview, confirmation, attribution, and monitoring.
Can this deployment be retried, rolled back, or rebuilt from branch HEAD?
Use the mutation's default dry run as the capability check. Do not infer eligibility from missing logs, app metadata, or deployment metadata.
For a new deployment from the connected branch or a prior exact commit:
- Resolve the environment. For a retry or rollback, also resolve the exact prior deployment.
- Perform configuration discovery only when the user requests it, deployment evidence indicates missing or misclassified variables, the selected commit has documented configuration requirements, or the server rejects the deployment for configuration reasons. Follow "Is required configuration present?" when one of these conditions applies. If a preview or execution rejection creates the condition, resolve it before retrying. Otherwise add no configuration prerequisite.
- Preview
trigger_deploymentfor branch HEAD orredeployfor a prior commit. If preview rejects the source, make no mutation and route local-source deployment towebflow-cli:cloud. - For
redeploy, explain that the older commit runs with the environment's current configuration, so compatibility is not guaranteed. - Show the returned branch or commit and explain that execution creates a new GitHub build, not a deployment of local files.
- Require
confirm. Immediately after confirmation, record the newest deployment as the correlation baseline, then execute withdry_run: falseand one stableidempotency_key. Reuse the key only for exact retries of this request. - Interpret the execution result before monitoring:
queued: this call enqueued a deployment.skippedfromtrigger_deployment: the branch has no commit, so no deployment was enqueued.processing: an earlier call with this key is already in flight; this call did not enqueue a duplicate.- An unknown or unreadable status leaves the outcome uncertain.
- The action returns no deployment ID. For
queuedor an existing in-flight request, polllist_deploymentsandget_deploymentfor a record appearing above the baseline captured before the first execution attempt. If that baseline is unavailable, report that attribution may be ambiguous. Do not assume the newest record belongs to this request when deployments are concurrent. - Stop when the attributed deployment leaves an active state or the bounded monitoring period ends. If monitoring ends first, report the last status and timestamp; do not call it failed or enqueue a replacement for that reason.
- For a retry or rollback, preview the prior deployment's exact commit hash and message. A rollback creates a new build at that commit; it does not move the environment branch.
4. Apply shared evidence and safety rules
- Treat build, deploy, and runtime logs as potentially sensitive customer output. Inspect for tokens, credentials, cookies, authorization headers, and presigned URLs before quoting or saving them.
- Quote only the minimum log evidence needed. Redact sensitive values and URLs.
- A request to inspect, diagnose, or preview does not authorize a mutation.
- Require an itemized preview and the exact word
confirmbefore every mutation. - Reconcile an uncertain mutation through observable state before retrying it.
- Reuse an idempotency key only for exact retries of the same logical request.
- Never delete a newly created app or environment automatically when configuration or deployment fails. Report the partial state.
5. Handle explicit administrative requests
These operations are supported but are not the skill's primary workflow.
For update_app:
- Fetch the current app with
get_app. - For a name or description change, prepare and show the exact change. Pass
description: nullto clear a description. - For
source_url, compare the currentsourceUrlwith the requested canonical GitHub repository URL. Explain that the immediate update requires a user-authorized token; machine tokens return403. - Require
confirm, callupdate_apponce, and verify withget_app. An unreadable response requires reconciliation before retrying. - A source update does not change an environment branch or deploy code. Treat those as separate confirmed mutations.
- Renaming a standalone app also attempts to rename its backing site; a sync failure can leave the old site name. Site-attached parent names are unchanged.
For delete_variable:
- Preview with the default dry run.
- If
existsis false, report that nothing was deleted and stop. - If
existsis true, show the app, environment, and key; warn that deletion is permanent and requireconfirm. - Call once with
dry_run: false. Treatdeleted: trueas success. Reconcile an uncertain response with an exact key lookup before retrying.
For delete_environment:
- Preview with the default dry run. Identify the app, environment, branch, and mount, and explain that its worker, KV/D1/R2 storage, deployments, and variables will be permanently removed.
- Explain that deletion is irreversible and is rejected for the app's last
environment. Require
confirm. - Call once with
dry_run: false. Treatdeleted: trueas success. - A failed or null
mountRefreshStatusmeans deletion succeeded but routing cleanup is failed or uncertain. Report it and never retry the delete. - For an uncertain response, page until the original
env_idis found or the listing ends. Do not use a branch filter whose value may have changed.
For delete_app:
- Preview with the default dry run and report
deletionMode. - Explain that
archiveunpublishes the app and removes it from the dashboard, whilehard_deletepermanently deletes the app and all its environments and cannot be undone. - Require
confirm, then call once withdry_run: false. - Treat
deleted: trueas success. Reconcile uncertainty withget_appor the app's exact site-and-name lookup before retrying.
6. Handle errors and report
- Duplicate environment branch or mount: report the conflicting environment; do not silently update or delete it.
- Partial CLI variable write: report failed keys without values and stop before deployment. Do not roll back successful keys or delete the environment.
GITHUB_APP_NOT_INSTALLEDorGITHUB_REPO_NOT_CONNECTED: provide the returnedinstallUrland retry only after the user completes the connection.- An unsupported deployment preview is a capability boundary, not a reason to bypass MCP with a direct API call.
For each final-report field below, include it only when applicable: the selected app; a resolved environment; evidence inspected; observed status; supported cause; limitations; mutations performed; partial state; and, when blocked, the next required user action.
Examples
Create a site-attached GitHub app
User: "Create search-app from https://github.com/acme/search on the
main branch and attach it to my marketing site at /search."
Resolve the site, preview create_app with its site ID and non-root mount, and
use the GitHub-source creation workflow. Report creation separately from the
automatic initial-deployment outcome.
Diagnose a failed deployment
User: "Why did the latest production deployment fail?"
Use the deployment-diagnostics workflow for the latest production deployment. Retrieve logs only when available and report empty results as unavailable evidence, not success.
Correct an environment mapping
User: "Production is serving the preview branch at /app. Point it back to
main at /."
Use the environment-mapping workflow and validate / against siteAttached.
Treat a requested deployment as a separate mutation.
Provision, configure, and deploy a branch environment
User: "Create a /preview environment for feature/search and deploy it.
It needs the variables in .env.preview."
Use the new-environment workflow, then apply its mandatory configuration gate before routing to deployment. Preserve the environment if a later step fails.
Guidelines
- Start from the user's operational question, not the action inventory.
- Prefer observable evidence over assumptions about how an app was built.
- Use mutation previews and returned errors as capability checks.
- Use CLI for local-source apps and deployments, and for variable values.
- Never use
data_apps_toolfor Designer variables. - Never expose secrets from variables, logs, errors, or URLs.
- Never mutate without an exact preview and explicit
confirm. - Never retry an uncertain mutation before reconciling observable state.
- Keep repository, environment, configuration, and deployment changes separate.
- Preserve partial resources unless the user explicitly requests deletion.
FAQ
What does the webflow-mcp:cloud-apps skill do?
Create GitHub-source Webflow Cloud apps and monitor, troubleshoot, or manage existing apps through Webflow MCP. Use when creating a standalone or site-attached app from GitHub; identifying apps or environments; checking public URLs, domains, configuration keys, or deployed versions; diagnosing failures; changing a GitHub source, branch, or mount; provisioning environments; or previewing a deployment, retry, or rollback. Do not use for Designer/CSS variables, CLI/local-source app creation or deployment, or passing environment-variable values through MCP.
How do I install webflow-mcp:cloud-apps?
Run npx skills add https://github.com/webflow/webflow-skills --skill webflow-mcp:cloud-apps in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/webflow-mcp:cloud-apps/ (personal) or .claude/skills/webflow-mcp:cloud-apps/ (project).
Which AI agents can use webflow-mcp:cloud-apps?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is webflow-mcp:cloud-apps safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains webflow-mcp:cloud-apps?
It is published by webflow in webflow/webflow-skills. It has 198 recorded installs.
More from webflow/webflow-skills
webflow-cli:cloud
webflow/webflow-skills
Create, build, and deploy Webflow Cloud apps from the CLI (site-attached or project apps), and manage existing ones — apps, domains, environments, deployments, build/runtime logs, and environment variables including secrets. Use when initializing or deploying a Cloud app, importing an existing GitHub repository, setting up CI/CD (GitHub Actions or GitHub-linked deploys), setting or importing secrets, retrying or rolling back a deployment, diagnosing a failed build, or resolving app/environment/workspace IDs from webflow.json or env vars.
webflow-cli:code-component
webflow/webflow-skills
Create and deploy reusable React components for Webflow Designer. Configure existing React projects with webflow.json, build and bundle code, validate output, and deploy to workspace using library share. Use when building custom components for designers.
webflow-cli:designer-extension
webflow/webflow-skills
Build Designer Extensions for custom Webflow Designer functionality. Lists available templates, initializes extension projects from templates (default/react/typescript-alt), bundles extensions for upload, and serves locally for development.
webflow-code-component:component-audit
webflow/webflow-skills
Audit Webflow Code Components for architecture decisions - prop exposure, state management, slot opportunities, and Shadow DOM compatibility. Focused on Webflow-specific patterns, not generic React best practices.
webflow-cli:troubleshooter
webflow/webflow-skills
Diagnose and fix Webflow CLI issues including installation problems, authentication failures, build errors, and bundle problems. Uses CLI diagnostic flags (--version, --help, --verbose, --debug-bundler) for troubleshooting.
webflow-code-component:component-scaffold
webflow/webflow-skills
Generate new Webflow Code Component boilerplate with React component, definition file, and optional styling. Automatically checks prerequisites and can set up missing config/dependencies.
Popular ai & agents skills
google-agents-cli-publish
google/agents-cli
This skill should be used when the user wants to "publish an agent", "publish my ADK agent", "register an agent with Gemini", "publish to Gemini" (formerly Gemini Enterprise), or needs guidance on the agents-cli publish gemini command. Also use when the user wants to "manage agents in Agent Registry", "list/update/delete registered agents", or "register an MCP server". Covers ADK vs A2A registration modes, programmatic and interactive usage, flag reference, auto-detection from deployment metadata, Agent Registry fleet management, and troubleshooting. Part of the agents-cli skills suite. Do NOT use for deployment (use google-agents-cli-deploy).
google-agents-cli-eval
google/agents-cli
This skill should be used when the user wants to "run an evaluation", "evaluate my agent", "evaluate my ADK agent", "write an eval dataset", "analyze eval failures", "compare eval results", "optimize agent", or needs guidance on the Gemini platform eval methodology and the Quality Flywheel. Covers eval metrics, dataset schema, LLM-as-judge scoring, and common failure causes. Applies to any agents-cli project, whatever framework the agent is written in. Do NOT use for agent API code patterns (ADK: use google-agents-cli-adk-code), deployment (use google-agents-cli-deploy), or project scaffolding (use google-agents-cli-scaffold).
skill-creator
anthropics/skills
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
codex-pet
prime-skills/runcomfy-agent-skills
Codex Pet generator on RunComfy. Build a Codex-compatible Codex Pet spritesheet.webp + pet.json from a single reference image, drop it into ${CODEXHOME:-$HOME/.codex}/pets/ / and Codex picks it up as a custom Codex Pet next to the 8 built-ins. This skill produces the exact Codex Pet atlas Codex expects (1536x1872 PNG/WebP, 8 cols x 9 rows, 192x208 cells, 9 animation states — idle, running-right, running-left, waving, jumping, failed, waiting, running, review). Calls OpenAI GPT Image 2 edit ONCE via the local RunComfy CLI as runcomfy run openai/gpt-image-2/edit to produce a canonical Codex Pet pose, then assembles all 9 animation rows programmatically with ImageMagick micro-transforms — no Codex Pro, no $imagegen, no OPENAIAPIKEY required, only RUNCOMFYTOKEN. Triggers on "codex pet", "create codex pet", "make codex pet", "hatch codex pet", "/hatch image", "desktop pet codex", "codex pets", "spritesheet.webp", or any explicit ask to build a custom pet for OpenAI Codex.
full-output-enforcement
leonxlnx/taste-skill
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
executing-plans
obra/superpowers
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available