@wix/mcp 1.0.90 → 1.0.92

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.
@@ -18,7 +18,7 @@ function buildSystemReminderGuidelines(includeReadme, includeImageUploadGuidance
18
18
  const exception = includeReadme ? '**Exception:** ' : '';
19
19
  const lines = [];
20
20
  if (includeReadme) {
21
- lines.push('if the WixREADME tool is available to you, YOU MUST USE IT AT THE BEGINNING OF ANY CONVERSATION and then continue with calling the other tools and calling the Wix APIs until the task is completed.', '**Exception — creating a new Wix site/website:** For a normal creation request — and only then — skip WixREADME and the docs search, and route straight to the Wix site-creation tools available to you; their descriptions carry the routing rules. Everything else starts with WixREADME as usual.', "If the user explicitly asks for a headless site, Wix Classic Editor site, or manual account/API-based site creation, call CreateWixBusinessGuide right away — these don't need the site's purpose first.", "If the user — or you, earlier in this conversation — already have a finished page or site in any form (HTML/CSS/JS files, a static build, a zip, another builder's export, a design you can export to HTML) and want it live on Wix, call DeployWebsite right away — not a site-creation tool, not the docs.", "Never default to AI or search templates unless the user explicitly requests it. When the user named no creation method - let the user make that choice as the site-creation tools' descriptions direct. Never route normal site creation through ManageWixSite, CallWixSiteAPI, or ExecuteWixAPI.");
21
+ lines.push('if the WixREADME tool is available to you, YOU MUST USE IT AT THE BEGINNING OF ANY CONVERSATION and then continue with calling the other tools and calling the Wix APIs until the task is completed.', '**Exception — creating a new Wix site/website:** For a normal creation request — and only then — skip WixREADME and the docs search, and route straight to the Wix site-creation tools available to you; their descriptions carry the routing rules. Everything else starts with WixREADME as usual.', "If the user explicitly asks for a headless site, Wix Classic Editor site, or manual account/API-based site creation, call CreateWixBusinessGuide right away — these don't need the site's purpose first.", "If the user — or you, earlier in this conversation — already have a finished page or site in any form (HTML/CSS/JS files, a static build, a zip, another builder's export, a design you can export to HTML) and want it live on Wix, call StartDeployWebsite right away — not a site-creation tool, not the docs.", "Never default to AI or search templates unless the user explicitly requests it. When the user named no creation method - let the user make that choice as the site-creation tools' descriptions direct. Never route normal site creation through ManageWixSite, CallWixSiteAPI, or ExecuteWixAPI.");
22
22
  }
23
23
  lines.push(`${exception}If the user asks to list, show, or find their Wix sites, ${includeReadme ? 'skip WixREADME and ' : ''}call ListWixSites directly.`);
24
24
  if (includeImageUploadGuidance) {
@@ -78,9 +78,11 @@ export const SITE_CREATION_COPY = {
78
78
  * `CreateWixBusinessGuide` is exempt: headless/classic/manual don't need the site's purpose.
79
79
  */
80
80
  const SITE_GUIDANCE = dedent `
81
- A new-site request has two things to settle: what the site is for, and how to build it. The how is AI generation vs. starting from a template, so naming templates, a template id or Wix Studio (Wix Studio is also the template side) already settles it.
81
+ First decide which of two different things is being asked for:
82
+ - The site is code the user or you control — hand-written HTML/CSS/JS, a static build, a zip, another AI builder's export, or a page or design you made earlier in this conversation — and it should go live on Wix. This is also the route whenever the user wants to keep working on the site here, with you: a Wix Headless site is a regular coded site, so you keep full control of the design and can change and redeploy it from this conversation at any time, and Wix business capabilities can be added to it as a backend when they are needed. Call StartDeployWebsite: it returns the recipe to host those exact files as a Wix Headless site (updates reuse the same site and URL; the drop page is only its fallback). Do not offer AI or templates for this and do not call any site-creation tool.
83
+ - Wix should create the site — generated with AI from a description, or started from a template — and the user will design and edit it in Wix rather than through you. That is what the site-creation tools do; they never take files you already have.
82
84
 
83
- One case skips all of this: a finished page or site ALREADY EXISTS, in any form — hand-written HTML/CSS/JS, a static build, a zip, another AI builder's export, or a page you made earlier in this conversation. There is nothing to build, so don't offer AI or templates and don't call any site-creation tool: call DeployWebsite, which returns the recipe to publish the files yourself (the drop page is only its fallback).
85
+ For a new site there are two things to settle: what the site is for, and how to build it. The how is AI generation vs. starting from a template, so naming templates, a template id or Wix Studio (Wix Studio is also the template side) already settles it.
84
86
 
85
87
  Settle what the site is for first: its purpose, topic, business type, audience, or main visitor action. Naming a method is not a description of the site, and neither is the business or industry on its own.
86
88
  If you can't tell yet, ask the preferred question below and nothing else — one question, no creation-method question in the same reply, and no internal tool names.
@@ -472,7 +474,7 @@ export function buildToolDescriptions(includeReadme, includeImageUploadGuidance
472
474
  `,
473
475
  'import-claude-design-from-url': dedent `
474
476
  Import a design created in Claude's design tool into Wix. Takes the signed claudeusercontent.com URL Claude Design produces for its self-contained HTML bundle (all images, fonts, and styles inlined); any other host is rejected. Creates a live Wix-hosted site and returns its URL.
475
- NOT for a page or site that exists in any other form (the user's own HTML/CSS/JS, a static build, a zip, another builder's export, a page you made in this conversation) — for those call DeployWebsite instead; it returns the recipe to publish the files yourself.
477
+ NOT for a page or site that exists in any other form (the user's own HTML/CSS/JS, a static build, a zip, another builder's export, a page you made in this conversation) — for those call StartDeployWebsite instead; it returns the recipe to publish the files yourself.
476
478
  `,
477
479
  RunWixCliCommand: dedent `
478
480
  Executes Wix CLI commands for Wix app development and management.
@@ -904,14 +906,14 @@ export function buildToolDescriptions(includeReadme, includeImageUploadGuidance
904
906
  WixSiteBuilder: dedent `
905
907
  ${SITE_GUIDANCE}
906
908
 
907
- Tool for generating a Wix site with AI (creating / building a site in Wix Harmony).
909
+ Tool for generating a Wix site with AI (creating / building a site in Wix Harmony) from a description. It does not take pages or files you already have — those go to StartDeployWebsite.
908
910
 
909
911
  Call this ONLY when the user's own words name AI (for example "create a site using AI" or "build it with AI") and the site intent is clear. A description of what the site should do — reservations, online ordering, a store, bookings, menus, a portfolio, and the like — is NOT a request for AI and NOT enough to call this tool; never infer AI from features or industry.
910
912
  Never default to this tool: if the user hasn't explicitly named AI, don't call this tool — ${SITE_CREATION_COPY.unstatedMethod.nonWidget}.
911
913
 
912
914
  For templates or Wix Studio, call \`SearchSiteTemplates\`; for a specific template by \`metaSiteId\` or \`templateId\`, call \`CreateSiteFromTemplate\`; for a headless or classic Wix Editor site, or manual/account-API creation, call \`CreateWixBusinessGuide\`.
913
915
 
914
- Do NOT suggest HTML code, prompt templates, or alternative approaches — actually build the site through this tool.
916
+ Do NOT suggest HTML code, prompt templates, or alternative approaches instead of building — actually build the site through this tool. (HTML the user already has is the StartDeployWebsite case, not a reason to build.)
915
917
  `,
916
918
  SearchSiteTemplates: dedent `
917
919
  ${SITE_GUIDANCE}
@@ -954,9 +956,9 @@ export function buildToolDescriptions(includeReadme, includeImageUploadGuidance
954
956
  Results: each root field fails independently — \`errors[].path\` names the failing field and \`errors[].extensions.message\` the cause (e.g. PERMISSION_DENIED); \`data\` still holds the fields that succeeded. Mutations return the created/updated entity — read the IDs from it and do not re-query to verify. Large results are truncated: narrow the selection or page size instead of re-running.
955
957
  Set \`hasMutations: true\` for any document containing a mutation root field.
956
958
  `,
957
- DeployWebsite: dedent `
958
- The user — or you, earlier in this conversation — ALREADY HAVE a finished page or site, in any form, and it should be live on Wix: HTML/CSS/JS files, a static build (dist/, out/), a zip, another AI builder's export, or a page/design you created in this conversation (export it to HTML first — a finished design IS a finished page). Call this when the user says deploy, host, publish, put online, make it live, get a URL, or upload my site / index.html.
959
- Also for updating a site deployed this way (replace its files; same site, same URL) and for implementing a backend on one (stores, bookings, CMS, members) as a Wix Headless project — same site, same URL. Works with or without a Wix login (anonymous deploy with a save link), through the Wix MCP alone or from a shell.
959
+ StartDeployWebsite: dedent `
960
+ The user — or you, earlier in this conversation — ALREADY HAVE a finished page or site, in any form, and it should be live on Wix — or an already-deployed Wix Headless site whose files should be replaced. The site can be HTML/CSS/JS files, a static build (dist/, out/), a zip, another AI builder's export, or a page/design you created in this conversation (export it to HTML first — a finished design IS a finished page). Call this when the user says deploy, host, publish, put online, make it live, get a URL, update my site, or upload my site / index.html.
961
+ Updates keep the same site and URL. Also for implementing a backend on such a site as a Wix Headless project — same site, same URL. Works with or without a Wix login (anonymous deploy with a save link), through the Wix MCP alone or from a shell.
960
962
  Missing real functionality — a fake checkout, a form that goes nowhere, bookings — is NOT a reason to rebuild the site with a site-creation tool: deploy the page as is, then add the backend afterwards (the recipe covers it).
961
963
  Returns the full recipe; follow it and run the flow yourself. The drop page is only the fallback when you can't.
962
964
  NOT for: a screenshot, mockup or reference image of a site the user WANTS (nothing exists to deploy yet — that is site creation: WixSiteBuilder / templates); a Claude Design share URL (import-claude-design-from-url); migrating a live site by URL or CSV exports; adding HTML or code into an existing Wix site; uploading images or documents to a site's media (UploadImageToWixSite).
@@ -964,7 +966,7 @@ export function buildToolDescriptions(includeReadme, includeImageUploadGuidance
964
966
  CreateWixBusinessGuide: dedent `
965
967
  Provides comprehensive documentation for creating a new Wix business (site, app, etc.).
966
968
  Call this ONLY when the user explicitly asks for a headless site, a Wix Classic Editor site, or manual/advanced account/API-based site creation — these don't need the site's purpose first. For normal site-creation ${SITE_CREATION_COPY.normalCreationRoute.nonWidget}; for a specific template id, call \`CreateSiteFromTemplate\`.
967
- Exception, even when the user says "headless": if a finished page or site already exists in any form (their own HTML/CSS/JS, a static build, a zip, an AI-builder export, a page you made in this conversation) and they want it hosted, don't call this tool — call DeployWebsite, which returns the recipe to publish the files yourself. This guide's CLI flow is for BUILDING a headless frontend, not for hosting ready-made files.
969
+ Exception, even when the user says "headless": if a finished page or site already exists in any form (their own HTML/CSS/JS, a static build, a zip, an AI-builder export, a page you made in this conversation) and they want it hosted, don't call this tool — call StartDeployWebsite, which returns the recipe to publish the files yourself. This guide's CLI flow is for BUILDING a headless frontend, not for hosting ready-made files.
968
970
 
969
971
  ## What This Tool Contains
970
972
 
@@ -19,8 +19,8 @@ export interface ReadmeDocConfig {
19
19
  export interface DocsToolsOptions {
20
20
  getToKnowWixEnabled?: boolean;
21
21
  createWixBusinessGuideEnabled?: boolean;
22
- /** DeployWebsite (publish ready-made site files) — an account-owner flow; off for visitor servers. */
23
- deployWebsiteEnabled?: boolean;
22
+ /** StartDeployWebsite (publish ready-made site files) — an account-owner flow; off for visitor servers. */
23
+ startDeployWebsiteEnabled?: boolean;
24
24
  disableTools?: string[];
25
25
  /** Custom descriptions for tools, keyed by tool name */
26
26
  toolDescriptions?: Record<string, string>;
@@ -8,7 +8,7 @@ import { fetchPlatformizedMenu, MenuNotFoundError } from './browse-menu.js';
8
8
  import { isQueryOrSearchEndpoint, QUERY_CAPABILITY_MARKER } from './searchFormatting.js';
9
9
  import { addGetToKnowTools, addGetSiteContextTool } from './get-to-know.js';
10
10
  import { addCreateWixBusinessGuideTools } from './create-site-guide.js';
11
- import { addDeployWebsiteTool } from './deploy-website.js';
11
+ import { addStartDeployWebsiteTool } from './start-deploy-website.js';
12
12
  import { defaultToolDescriptions } from '../config/default-config.js';
13
13
  import { desc } from '../config/param-descriptions.js';
14
14
  import dedent from 'dedent';
@@ -68,7 +68,7 @@ export const addDocsTools = (server, allowedTools = [
68
68
  'CLI',
69
69
  'OVERVIEW'
70
70
  ], options = {}) => {
71
- const { getToKnowWixEnabled = false, createWixBusinessGuideEnabled = true, deployWebsiteEnabled = true, disableTools, toolDescriptions, readmeDocs, authStrategy, skillsPortalUrl, skillsRepo, repo, skillsPr, commitHash, skillsTags, dynamicContextEnabled, cliEnabled = false, usePlatformizedSearch = true, usePlatformizedBrowse = true } = options;
71
+ const { getToKnowWixEnabled = false, createWixBusinessGuideEnabled = true, startDeployWebsiteEnabled = true, disableTools, toolDescriptions, readmeDocs, authStrategy, skillsPortalUrl, skillsRepo, repo, skillsPr, commitHash, skillsTags, dynamicContextEnabled, cliEnabled = false, usePlatformizedSearch = true, usePlatformizedBrowse = true } = options;
72
72
  const effectiveRepo = repo ?? skillsRepo;
73
73
  const effectiveCommitHash = commitHash ?? skillsPr;
74
74
  // Helper to get description (custom or default)
@@ -126,8 +126,8 @@ export const addDocsTools = (server, allowedTools = [
126
126
  }
127
127
  // On by default: it is a routing slot, not a docs source — the agent with
128
128
  // ready-made site files must find it next to the site-creation tools.
129
- if (deployWebsiteEnabled) {
130
- addDeployWebsiteTool(server, disableTools || [], toolDescriptions, {
129
+ if (startDeployWebsiteEnabled) {
130
+ addStartDeployWebsiteTool(server, disableTools || [], toolDescriptions, {
131
131
  skillsPortalUrl,
132
132
  repo: effectiveRepo,
133
133
  commitHash: effectiveCommitHash
@@ -0,0 +1,22 @@
1
+ import { WixMcpServer } from '../wix-mcp-server.js';
2
+ export declare const START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS: {
3
+ readonly userRequest: "The user's request that led here, quoted if short, otherwise summarized in a sentence.";
4
+ readonly siteDescription: "What the site is: its purpose and who it is for. One or two sentences.";
5
+ readonly siteForm: "The form the site exists in right now (HTML/CSS/JS files, a static build, a zip, another builder's export, a design created in this conversation, or something else), roughly how many files, and whether it includes images.";
6
+ readonly siteFunctionality: "What the site must be able to do for its visitors beyond showing pages, if anything (for example selling, bookings or reservations, tickets, menus and orders, rentals, forms, memberships or paid plans, donations, a blog, or anything else the user expects to work), in your own words. If it is a plain static site with no such needs, say so.";
7
+ readonly agentIdentity: "Which agent or product you are and the harness you run in.";
8
+ readonly wixAccess: "How you can reach Wix from where you run: through this MCP only, or also from a shell whose network can reach wixapis.com; whether you can run the Wix CLI (npx @wix/cli) there and whether it is logged in; and which Wix identity you act with — the user's login through this MCP, a CLI login, or none.";
9
+ };
10
+ export declare const START_DEPLOY_WEBSITE_PARAMS: Array<keyof typeof START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS>;
11
+ export declare const START_DEPLOY_WEBSITE_TOOL_NAME = "StartDeployWebsite";
12
+ export declare const START_DEPLOY_WEBSITE_RECIPE_URL = "https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md";
13
+ export declare const DROP_PAGE_URL = "https://www.wix.com/headless/drop?utm_campaign=mcp";
14
+ export declare function startDeployWebsiteResponse(recipe: string): string;
15
+ export declare const START_DEPLOY_WEBSITE_POINTER_RESPONSE: string;
16
+ export interface StartDeployWebsiteFetchOptions {
17
+ skillsPortalUrl?: string;
18
+ repo?: string;
19
+ commitHash?: string;
20
+ }
21
+ export declare function addStartDeployWebsiteTool(server: WixMcpServer, disableTools?: string[], toolDescriptions?: Record<string, string>, fetchOptions?: StartDeployWebsiteFetchOptions): void;
22
+ //# sourceMappingURL=start-deploy-website.d.ts.map
@@ -0,0 +1,83 @@
1
+ import { z } from 'zod';
2
+ import { defaultToolDescriptions } from '../config/default-config.js';
3
+ import { fetchArticleContent } from './fetch-article.js';
4
+ // These arguments are the only record of who deploys what; they are read by
5
+ // people via BI and do not change the response. One field per question so each
6
+ // can be analyzed on its own.
7
+ export const START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS = {
8
+ userRequest: "The user's request that led here, quoted if short, otherwise summarized in a sentence.",
9
+ siteDescription: 'What the site is: its purpose and who it is for. One or two sentences.',
10
+ siteForm: "The form the site exists in right now (HTML/CSS/JS files, a static build, a zip, another builder's export, a design created in this conversation, or something else), roughly how many files, and whether it includes images.",
11
+ siteFunctionality: 'What the site must be able to do for its visitors beyond showing pages, if anything (for example selling, bookings or reservations, tickets, menus and orders, rentals, forms, memberships or paid plans, donations, a blog, or anything else the user expects to work), in your own words. If it is a plain static site with no such needs, say so.',
12
+ agentIdentity: 'Which agent or product you are and the harness you run in.',
13
+ wixAccess: "How you can reach Wix from where you run: through this MCP only, or also from a shell whose network can reach wixapis.com; whether you can run the Wix CLI (npx @wix/cli) there and whether it is logged in; and which Wix identity you act with — the user's login through this MCP, a CLI login, or none."
14
+ };
15
+ export const START_DEPLOY_WEBSITE_PARAMS = Object.keys(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS);
16
+ export const START_DEPLOY_WEBSITE_TOOL_NAME = 'StartDeployWebsite';
17
+ export const START_DEPLOY_WEBSITE_RECIPE_URL = 'https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md';
18
+ export const DROP_PAGE_URL = 'https://www.wix.com/headless/drop?utm_campaign=mcp';
19
+ const FALLBACK_LINE = `Only if you cannot run it (you can't reach the file bytes, or a step fails and you can't fix it): send the user to ${DROP_PAGE_URL} — give that URL exactly as written, keeping the utm_campaign=mcp parameter.`;
20
+ // The tool exists to take the agent's attention at routing time; the work itself
21
+ // is the recipe, so the response IS the recipe — fetched live and returned whole,
22
+ // so the agent never has to decide whether to go read it.
23
+ export function startDeployWebsiteResponse(recipe) {
24
+ return [
25
+ `The following is the content of ${START_DEPLOY_WEBSITE_RECIPE_URL}. Follow it end to end and do the publishing yourself — do not hand the user instructions.`,
26
+ FALLBACK_LINE,
27
+ '---',
28
+ recipe.trim()
29
+ ].join('\n\n');
30
+ }
31
+ // When the recipe can't be fetched, the pointer still routes correctly.
32
+ export const START_DEPLOY_WEBSITE_POINTER_RESPONSE = [
33
+ `Read and follow this recipe end to end: ${START_DEPLOY_WEBSITE_RECIPE_URL}`,
34
+ 'It covers creating the site and uploading the files (with or without a Wix login), updating a site deployed this way, and implementing a backend on it (stores, bookings, CMS, members) as a Wix Headless project. Do the publishing yourself — do not hand the user instructions.',
35
+ FALLBACK_LINE
36
+ ].join('\n\n');
37
+ export function addStartDeployWebsiteTool(server, disableTools = [], toolDescriptions, fetchOptions = {}) {
38
+ if (disableTools.includes(START_DEPLOY_WEBSITE_TOOL_NAME)) {
39
+ return;
40
+ }
41
+ server.tool(START_DEPLOY_WEBSITE_TOOL_NAME, toolDescriptions?.[START_DEPLOY_WEBSITE_TOOL_NAME] ??
42
+ defaultToolDescriptions[START_DEPLOY_WEBSITE_TOOL_NAME], {
43
+ userRequest: z
44
+ .string()
45
+ .min(1)
46
+ .describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.userRequest),
47
+ siteDescription: z
48
+ .string()
49
+ .min(1)
50
+ .describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.siteDescription),
51
+ siteForm: z
52
+ .string()
53
+ .min(1)
54
+ .describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.siteForm),
55
+ siteFunctionality: z
56
+ .string()
57
+ .min(1)
58
+ .describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.siteFunctionality),
59
+ agentIdentity: z
60
+ .string()
61
+ .min(1)
62
+ .describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.agentIdentity),
63
+ wixAccess: z
64
+ .string()
65
+ .min(1)
66
+ .describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.wixAccess)
67
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: false }, async (_args, { httpClient }) => {
68
+ let text = START_DEPLOY_WEBSITE_POINTER_RESPONSE;
69
+ try {
70
+ // Same path ReadFullDocsArticle takes for this page: the rawdocs article
71
+ // API, addressed without the .md suffix, header scaffolding stripped.
72
+ const recipe = await fetchArticleContent(httpClient, START_DEPLOY_WEBSITE_RECIPE_URL.replace(/\.md$/, ''), 'article', true, fetchOptions.skillsPortalUrl, fetchOptions.repo, fetchOptions.commitHash);
73
+ if (recipe && recipe.trim()) {
74
+ text = startDeployWebsiteResponse(recipe);
75
+ }
76
+ }
77
+ catch (error) {
78
+ console.warn(`[StartDeployWebsite] recipe fetch failed, returning the pointer:`, error instanceof Error ? error.message : error);
79
+ }
80
+ return { content: [{ type: 'text', text }] };
81
+ });
82
+ }
83
+ //# sourceMappingURL=start-deploy-website.js.map
@@ -86,11 +86,11 @@ export function addImportClaudeDesignTool(server, authStrategy, options) {
86
86
  designUrl = new URL(args.url);
87
87
  }
88
88
  catch {
89
- return errorResult("Invalid design URL — this tool only accepts the claudeusercontent.com URL produced by Claude Design. For a page or site that exists in any other form (the user's files, a build, a zip, another builder's export, a page you made), do not retry this tool — call DeployWebsite, which returns the recipe to publish the files yourself. If that tool isn't available: read https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md and publish them yourself, or send the user to https://www.wix.com/headless/drop?utm_campaign=mcp.");
89
+ return errorResult("Invalid design URL — this tool only accepts the claudeusercontent.com URL produced by Claude Design. For a page or site that exists in any other form (the user's files, a build, a zip, another builder's export, a page you made), do not retry this tool — call StartDeployWebsite, which returns the recipe to publish the files yourself. If that tool isn't available: read https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md and publish them yourself, or send the user to https://www.wix.com/headless/drop?utm_campaign=mcp.");
90
90
  }
91
91
  if (designUrl.protocol !== 'https:' ||
92
92
  !designUrl.hostname.endsWith(CLAUDE_USER_CONTENT_HOST_SUFFIX)) {
93
- return errorResult("Invalid design URL — this tool only accepts the claudeusercontent.com URL produced by Claude Design. For a page or site that exists in any other form (the user's files, a build, a zip, another builder's export, a page you made), do not retry this tool — call DeployWebsite, which returns the recipe to publish the files yourself. If that tool isn't available: read https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md and publish them yourself, or send the user to https://www.wix.com/headless/drop?utm_campaign=mcp.");
93
+ return errorResult("Invalid design URL — this tool only accepts the claudeusercontent.com URL produced by Claude Design. For a page or site that exists in any other form (the user's files, a build, a zip, another builder's export, a page you made), do not retry this tool — call StartDeployWebsite, which returns the recipe to publish the files yourself. If that tool isn't available: read https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md and publish them yourself, or send the user to https://www.wix.com/headless/drop?utm_campaign=mcp.");
94
94
  }
95
95
  // Resolve the caller's account identity BEFORE the design fetch — the
96
96
  // design URL is single-use, so an unauthenticated caller must fail
@@ -127,8 +127,8 @@ export interface ReadmeDocConfig {
127
127
  export interface DocsToolsOptions {
128
128
  getToKnowWixEnabled?: boolean;
129
129
  createWixBusinessGuideEnabled?: boolean;
130
- /** DeployWebsite (publish ready-made site files) — an account-owner flow; off for visitor servers. */
131
- deployWebsiteEnabled?: boolean;
130
+ /** StartDeployWebsite (publish ready-made site files) — an account-owner flow; off for visitor servers. */
131
+ startDeployWebsiteEnabled?: boolean;
132
132
  disableTools?: string[];
133
133
  /** Custom descriptions for tools, keyed by tool name */
134
134
  toolDescriptions?: Record<string, string>;
@@ -127,8 +127,8 @@ export interface ReadmeDocConfig {
127
127
  export interface DocsToolsOptions {
128
128
  getToKnowWixEnabled?: boolean;
129
129
  createWixBusinessGuideEnabled?: boolean;
130
- /** DeployWebsite (publish ready-made site files) — an account-owner flow; off for visitor servers. */
131
- deployWebsiteEnabled?: boolean;
130
+ /** StartDeployWebsite (publish ready-made site files) — an account-owner flow; off for visitor servers. */
131
+ startDeployWebsiteEnabled?: boolean;
132
132
  disableTools?: string[];
133
133
  /** Custom descriptions for tools, keyed by tool name */
134
134
  toolDescriptions?: Record<string, string>;
@@ -30928,7 +30928,7 @@ function buildSystemReminderGuidelines(includeReadme, includeImageUploadGuidance
30928
30928
  "if the WixREADME tool is available to you, YOU MUST USE IT AT THE BEGINNING OF ANY CONVERSATION and then continue with calling the other tools and calling the Wix APIs until the task is completed.",
30929
30929
  "**Exception \u2014 creating a new Wix site/website:** For a normal creation request \u2014 and only then \u2014 skip WixREADME and the docs search, and route straight to the Wix site-creation tools available to you; their descriptions carry the routing rules. Everything else starts with WixREADME as usual.",
30930
30930
  "If the user explicitly asks for a headless site, Wix Classic Editor site, or manual account/API-based site creation, call CreateWixBusinessGuide right away \u2014 these don't need the site's purpose first.",
30931
- "If the user \u2014 or you, earlier in this conversation \u2014 already have a finished page or site in any form (HTML/CSS/JS files, a static build, a zip, another builder's export, a design you can export to HTML) and want it live on Wix, call DeployWebsite right away \u2014 not a site-creation tool, not the docs.",
30931
+ "If the user \u2014 or you, earlier in this conversation \u2014 already have a finished page or site in any form (HTML/CSS/JS files, a static build, a zip, another builder's export, a design you can export to HTML) and want it live on Wix, call StartDeployWebsite right away \u2014 not a site-creation tool, not the docs.",
30932
30932
  "Never default to AI or search templates unless the user explicitly requests it. When the user named no creation method - let the user make that choice as the site-creation tools' descriptions direct. Never route normal site creation through ManageWixSite, CallWixSiteAPI, or ExecuteWixAPI."
30933
30933
  );
30934
30934
  }
@@ -31008,9 +31008,11 @@ var SITE_CREATION_COPY = {
31008
31008
  }
31009
31009
  };
31010
31010
  var SITE_GUIDANCE = dedent_default`
31011
- A new-site request has two things to settle: what the site is for, and how to build it. The how is AI generation vs. starting from a template, so naming templates, a template id or Wix Studio (Wix Studio is also the template side) already settles it.
31011
+ First decide which of two different things is being asked for:
31012
+ - The site is code the user or you control — hand-written HTML/CSS/JS, a static build, a zip, another AI builder's export, or a page or design you made earlier in this conversation — and it should go live on Wix. This is also the route whenever the user wants to keep working on the site here, with you: a Wix Headless site is a regular coded site, so you keep full control of the design and can change and redeploy it from this conversation at any time, and Wix business capabilities can be added to it as a backend when they are needed. Call StartDeployWebsite: it returns the recipe to host those exact files as a Wix Headless site (updates reuse the same site and URL; the drop page is only its fallback). Do not offer AI or templates for this and do not call any site-creation tool.
31013
+ - Wix should create the site — generated with AI from a description, or started from a template — and the user will design and edit it in Wix rather than through you. That is what the site-creation tools do; they never take files you already have.
31012
31014
 
31013
- One case skips all of this: a finished page or site ALREADY EXISTS, in any form — hand-written HTML/CSS/JS, a static build, a zip, another AI builder's export, or a page you made earlier in this conversation. There is nothing to build, so don't offer AI or templates and don't call any site-creation tool: call DeployWebsite, which returns the recipe to publish the files yourself (the drop page is only its fallback).
31015
+ For a new site there are two things to settle: what the site is for, and how to build it. The how is AI generation vs. starting from a template, so naming templates, a template id or Wix Studio (Wix Studio is also the template side) already settles it.
31014
31016
 
31015
31017
  Settle what the site is for first: its purpose, topic, business type, audience, or main visitor action. Naming a method is not a description of the site, and neither is the business or industry on its own.
31016
31018
  If you can't tell yet, ask the preferred question below and nothing else — one question, no creation-method question in the same reply, and no internal tool names.
@@ -31402,7 +31404,7 @@ function buildToolDescriptions(includeReadme, includeImageUploadGuidance = true)
31402
31404
  `,
31403
31405
  "import-claude-design-from-url": dedent_default`
31404
31406
  Import a design created in Claude's design tool into Wix. Takes the signed claudeusercontent.com URL Claude Design produces for its self-contained HTML bundle (all images, fonts, and styles inlined); any other host is rejected. Creates a live Wix-hosted site and returns its URL.
31405
- NOT for a page or site that exists in any other form (the user's own HTML/CSS/JS, a static build, a zip, another builder's export, a page you made in this conversation) — for those call DeployWebsite instead; it returns the recipe to publish the files yourself.
31407
+ NOT for a page or site that exists in any other form (the user's own HTML/CSS/JS, a static build, a zip, another builder's export, a page you made in this conversation) — for those call StartDeployWebsite instead; it returns the recipe to publish the files yourself.
31406
31408
  `,
31407
31409
  RunWixCliCommand: dedent_default`
31408
31410
  Executes Wix CLI commands for Wix app development and management.
@@ -31834,14 +31836,14 @@ function buildToolDescriptions(includeReadme, includeImageUploadGuidance = true)
31834
31836
  WixSiteBuilder: dedent_default`
31835
31837
  ${SITE_GUIDANCE}
31836
31838
 
31837
- Tool for generating a Wix site with AI (creating / building a site in Wix Harmony).
31839
+ Tool for generating a Wix site with AI (creating / building a site in Wix Harmony) from a description. It does not take pages or files you already have — those go to StartDeployWebsite.
31838
31840
 
31839
31841
  Call this ONLY when the user's own words name AI (for example "create a site using AI" or "build it with AI") and the site intent is clear. A description of what the site should do — reservations, online ordering, a store, bookings, menus, a portfolio, and the like — is NOT a request for AI and NOT enough to call this tool; never infer AI from features or industry.
31840
31842
  Never default to this tool: if the user hasn't explicitly named AI, don't call this tool — ${SITE_CREATION_COPY.unstatedMethod.nonWidget}.
31841
31843
 
31842
31844
  For templates or Wix Studio, call \`SearchSiteTemplates\`; for a specific template by \`metaSiteId\` or \`templateId\`, call \`CreateSiteFromTemplate\`; for a headless or classic Wix Editor site, or manual/account-API creation, call \`CreateWixBusinessGuide\`.
31843
31845
 
31844
- Do NOT suggest HTML code, prompt templates, or alternative approaches — actually build the site through this tool.
31846
+ Do NOT suggest HTML code, prompt templates, or alternative approaches instead of building — actually build the site through this tool. (HTML the user already has is the StartDeployWebsite case, not a reason to build.)
31845
31847
  `,
31846
31848
  SearchSiteTemplates: dedent_default`
31847
31849
  ${SITE_GUIDANCE}
@@ -31884,9 +31886,9 @@ function buildToolDescriptions(includeReadme, includeImageUploadGuidance = true)
31884
31886
  Results: each root field fails independently — \`errors[].path\` names the failing field and \`errors[].extensions.message\` the cause (e.g. PERMISSION_DENIED); \`data\` still holds the fields that succeeded. Mutations return the created/updated entity — read the IDs from it and do not re-query to verify. Large results are truncated: narrow the selection or page size instead of re-running.
31885
31887
  Set \`hasMutations: true\` for any document containing a mutation root field.
31886
31888
  `,
31887
- DeployWebsite: dedent_default`
31888
- The user — or you, earlier in this conversation — ALREADY HAVE a finished page or site, in any form, and it should be live on Wix: HTML/CSS/JS files, a static build (dist/, out/), a zip, another AI builder's export, or a page/design you created in this conversation (export it to HTML first — a finished design IS a finished page). Call this when the user says deploy, host, publish, put online, make it live, get a URL, or upload my site / index.html.
31889
- Also for updating a site deployed this way (replace its files; same site, same URL) and for implementing a backend on one (stores, bookings, CMS, members) as a Wix Headless project — same site, same URL. Works with or without a Wix login (anonymous deploy with a save link), through the Wix MCP alone or from a shell.
31889
+ StartDeployWebsite: dedent_default`
31890
+ The user — or you, earlier in this conversation — ALREADY HAVE a finished page or site, in any form, and it should be live on Wix — or an already-deployed Wix Headless site whose files should be replaced. The site can be HTML/CSS/JS files, a static build (dist/, out/), a zip, another AI builder's export, or a page/design you created in this conversation (export it to HTML first — a finished design IS a finished page). Call this when the user says deploy, host, publish, put online, make it live, get a URL, update my site, or upload my site / index.html.
31891
+ Updates keep the same site and URL. Also for implementing a backend on such a site as a Wix Headless project — same site, same URL. Works with or without a Wix login (anonymous deploy with a save link), through the Wix MCP alone or from a shell.
31890
31892
  Missing real functionality — a fake checkout, a form that goes nowhere, bookings — is NOT a reason to rebuild the site with a site-creation tool: deploy the page as is, then add the backend afterwards (the recipe covers it).
31891
31893
  Returns the full recipe; follow it and run the flow yourself. The drop page is only the fallback when you can't.
31892
31894
  NOT for: a screenshot, mockup or reference image of a site the user WANTS (nothing exists to deploy yet — that is site creation: WixSiteBuilder / templates); a Claude Design share URL (import-claude-design-from-url); migrating a live site by URL or CSV exports; adding HTML or code into an existing Wix site; uploading images or documents to a site's media (UploadImageToWixSite).
@@ -31894,7 +31896,7 @@ function buildToolDescriptions(includeReadme, includeImageUploadGuidance = true)
31894
31896
  CreateWixBusinessGuide: dedent_default`
31895
31897
  Provides comprehensive documentation for creating a new Wix business (site, app, etc.).
31896
31898
  Call this ONLY when the user explicitly asks for a headless site, a Wix Classic Editor site, or manual/advanced account/API-based site creation — these don't need the site's purpose first. For normal site-creation ${SITE_CREATION_COPY.normalCreationRoute.nonWidget}; for a specific template id, call \`CreateSiteFromTemplate\`.
31897
- Exception, even when the user says "headless": if a finished page or site already exists in any form (their own HTML/CSS/JS, a static build, a zip, an AI-builder export, a page you made in this conversation) and they want it hosted, don't call this tool — call DeployWebsite, which returns the recipe to publish the files yourself. This guide's CLI flow is for BUILDING a headless frontend, not for hosting ready-made files.
31899
+ Exception, even when the user says "headless": if a finished page or site already exists in any form (their own HTML/CSS/JS, a static build, a zip, an AI-builder export, a page you made in this conversation) and they want it hosted, don't call this tool — call StartDeployWebsite, which returns the recipe to publish the files yourself. This guide's CLI flow is for BUILDING a headless frontend, not for hosting ready-made files.
31898
31900
 
31899
31901
  ## What This Tool Contains
31900
31902
 
@@ -33041,39 +33043,57 @@ ${articleContent}${nextSteps}`;
33041
33043
  );
33042
33044
  }
33043
33045
 
33044
- // src/docs/deploy-website.ts
33045
- var DEPLOY_WEBSITE_TOOL_NAME = "DeployWebsite";
33046
- var DEPLOY_WEBSITE_RECIPE_URL = "https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md";
33046
+ // src/docs/start-deploy-website.ts
33047
+ var START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS = {
33048
+ userRequest: "The user's request that led here, quoted if short, otherwise summarized in a sentence.",
33049
+ siteDescription: "What the site is: its purpose and who it is for. One or two sentences.",
33050
+ siteForm: "The form the site exists in right now (HTML/CSS/JS files, a static build, a zip, another builder's export, a design created in this conversation, or something else), roughly how many files, and whether it includes images.",
33051
+ siteFunctionality: "What the site must be able to do for its visitors beyond showing pages, if anything (for example selling, bookings or reservations, tickets, menus and orders, rentals, forms, memberships or paid plans, donations, a blog, or anything else the user expects to work), in your own words. If it is a plain static site with no such needs, say so.",
33052
+ agentIdentity: "Which agent or product you are and the harness you run in.",
33053
+ wixAccess: "How you can reach Wix from where you run: through this MCP only, or also from a shell whose network can reach wixapis.com; whether you can run the Wix CLI (npx @wix/cli) there and whether it is logged in; and which Wix identity you act with \u2014 the user's login through this MCP, a CLI login, or none."
33054
+ };
33055
+ var START_DEPLOY_WEBSITE_PARAMS = Object.keys(
33056
+ START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS
33057
+ );
33058
+ var START_DEPLOY_WEBSITE_TOOL_NAME = "StartDeployWebsite";
33059
+ var START_DEPLOY_WEBSITE_RECIPE_URL = "https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md";
33047
33060
  var DROP_PAGE_URL = "https://www.wix.com/headless/drop?utm_campaign=mcp";
33048
33061
  var FALLBACK_LINE = `Only if you cannot run it (you can't reach the file bytes, or a step fails and you can't fix it): send the user to ${DROP_PAGE_URL} \u2014 give that URL exactly as written, keeping the utm_campaign=mcp parameter.`;
33049
- function deployWebsiteResponse(recipe) {
33062
+ function startDeployWebsiteResponse(recipe) {
33050
33063
  return [
33051
- `The following is the content of ${DEPLOY_WEBSITE_RECIPE_URL}. Follow it end to end and do the publishing yourself \u2014 do not hand the user instructions.`,
33064
+ `The following is the content of ${START_DEPLOY_WEBSITE_RECIPE_URL}. Follow it end to end and do the publishing yourself \u2014 do not hand the user instructions.`,
33052
33065
  FALLBACK_LINE,
33053
33066
  "---",
33054
33067
  recipe.trim()
33055
33068
  ].join("\n\n");
33056
33069
  }
33057
- var DEPLOY_WEBSITE_POINTER_RESPONSE = [
33058
- `Read and follow this recipe end to end: ${DEPLOY_WEBSITE_RECIPE_URL}`,
33070
+ var START_DEPLOY_WEBSITE_POINTER_RESPONSE = [
33071
+ `Read and follow this recipe end to end: ${START_DEPLOY_WEBSITE_RECIPE_URL}`,
33059
33072
  "It covers creating the site and uploading the files (with or without a Wix login), updating a site deployed this way, and implementing a backend on it (stores, bookings, CMS, members) as a Wix Headless project. Do the publishing yourself \u2014 do not hand the user instructions.",
33060
33073
  FALLBACK_LINE
33061
33074
  ].join("\n\n");
33062
- function addDeployWebsiteTool(server, disableTools = [], toolDescriptions, fetchOptions = {}) {
33063
- if (disableTools.includes(DEPLOY_WEBSITE_TOOL_NAME)) {
33075
+ function addStartDeployWebsiteTool(server, disableTools = [], toolDescriptions, fetchOptions = {}) {
33076
+ if (disableTools.includes(START_DEPLOY_WEBSITE_TOOL_NAME)) {
33064
33077
  return;
33065
33078
  }
33066
33079
  server.tool(
33067
- DEPLOY_WEBSITE_TOOL_NAME,
33068
- toolDescriptions?.[DEPLOY_WEBSITE_TOOL_NAME] ?? defaultToolDescriptions[DEPLOY_WEBSITE_TOOL_NAME],
33069
- {},
33080
+ START_DEPLOY_WEBSITE_TOOL_NAME,
33081
+ toolDescriptions?.[START_DEPLOY_WEBSITE_TOOL_NAME] ?? defaultToolDescriptions[START_DEPLOY_WEBSITE_TOOL_NAME],
33082
+ {
33083
+ userRequest: external_exports.string().min(1).describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.userRequest),
33084
+ siteDescription: external_exports.string().min(1).describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.siteDescription),
33085
+ siteForm: external_exports.string().min(1).describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.siteForm),
33086
+ siteFunctionality: external_exports.string().min(1).describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.siteFunctionality),
33087
+ agentIdentity: external_exports.string().min(1).describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.agentIdentity),
33088
+ wixAccess: external_exports.string().min(1).describe(START_DEPLOY_WEBSITE_PARAM_DESCRIPTIONS.wixAccess)
33089
+ },
33070
33090
  { readOnlyHint: true, destructiveHint: false, openWorldHint: false },
33071
33091
  async (_args, { httpClient: httpClient6 }) => {
33072
- let text = DEPLOY_WEBSITE_POINTER_RESPONSE;
33092
+ let text = START_DEPLOY_WEBSITE_POINTER_RESPONSE;
33073
33093
  try {
33074
33094
  const recipe = await fetchArticleContent(
33075
33095
  httpClient6,
33076
- DEPLOY_WEBSITE_RECIPE_URL.replace(/\.md$/, ""),
33096
+ START_DEPLOY_WEBSITE_RECIPE_URL.replace(/\.md$/, ""),
33077
33097
  "article",
33078
33098
  true,
33079
33099
  fetchOptions.skillsPortalUrl,
@@ -33081,11 +33101,11 @@ function addDeployWebsiteTool(server, disableTools = [], toolDescriptions, fetch
33081
33101
  fetchOptions.commitHash
33082
33102
  );
33083
33103
  if (recipe && recipe.trim()) {
33084
- text = deployWebsiteResponse(recipe);
33104
+ text = startDeployWebsiteResponse(recipe);
33085
33105
  }
33086
33106
  } catch (error2) {
33087
33107
  console.warn(
33088
- `[DeployWebsite] recipe fetch failed, returning the pointer:`,
33108
+ `[StartDeployWebsite] recipe fetch failed, returning the pointer:`,
33089
33109
  error2 instanceof Error ? error2.message : error2
33090
33110
  );
33091
33111
  }
@@ -33153,7 +33173,7 @@ var addDocsTools = (server, allowedTools = [
33153
33173
  const {
33154
33174
  getToKnowWixEnabled = false,
33155
33175
  createWixBusinessGuideEnabled = true,
33156
- deployWebsiteEnabled = true,
33176
+ startDeployWebsiteEnabled = true,
33157
33177
  disableTools,
33158
33178
  toolDescriptions,
33159
33179
  readmeDocs,
@@ -33219,8 +33239,8 @@ var addDocsTools = (server, allowedTools = [
33219
33239
  cliEnabled
33220
33240
  );
33221
33241
  }
33222
- if (deployWebsiteEnabled) {
33223
- addDeployWebsiteTool(server, disableTools || [], toolDescriptions, {
33242
+ if (startDeployWebsiteEnabled) {
33243
+ addStartDeployWebsiteTool(server, disableTools || [], toolDescriptions, {
33224
33244
  skillsPortalUrl,
33225
33245
  repo: effectiveRepo,
33226
33246
  commitHash: effectiveCommitHash
@@ -46002,12 +46022,12 @@ function addImportClaudeDesignTool(server, authStrategy, options) {
46002
46022
  designUrl = new URL(args.url);
46003
46023
  } catch {
46004
46024
  return errorResult(
46005
- "Invalid design URL \u2014 this tool only accepts the claudeusercontent.com URL produced by Claude Design. For a page or site that exists in any other form (the user's files, a build, a zip, another builder's export, a page you made), do not retry this tool \u2014 call DeployWebsite, which returns the recipe to publish the files yourself. If that tool isn't available: read https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md and publish them yourself, or send the user to https://www.wix.com/headless/drop?utm_campaign=mcp."
46025
+ "Invalid design URL \u2014 this tool only accepts the claudeusercontent.com URL produced by Claude Design. For a page or site that exists in any other form (the user's files, a build, a zip, another builder's export, a page you made), do not retry this tool \u2014 call StartDeployWebsite, which returns the recipe to publish the files yourself. If that tool isn't available: read https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md and publish them yourself, or send the user to https://www.wix.com/headless/drop?utm_campaign=mcp."
46006
46026
  );
46007
46027
  }
46008
46028
  if (designUrl.protocol !== "https:" || !designUrl.hostname.endsWith(CLAUDE_USER_CONTENT_HOST_SUFFIX)) {
46009
46029
  return errorResult(
46010
- "Invalid design URL \u2014 this tool only accepts the claudeusercontent.com URL produced by Claude Design. For a page or site that exists in any other form (the user's files, a build, a zip, another builder's export, a page you made), do not retry this tool \u2014 call DeployWebsite, which returns the recipe to publish the files yourself. If that tool isn't available: read https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md and publish them yourself, or send the user to https://www.wix.com/headless/drop?utm_campaign=mcp."
46030
+ "Invalid design URL \u2014 this tool only accepts the claudeusercontent.com URL produced by Claude Design. For a page or site that exists in any other form (the user's files, a build, a zip, another builder's export, a page you made), do not retry this tool \u2014 call StartDeployWebsite, which returns the recipe to publish the files yourself. If that tool isn't available: read https://dev.wix.com/docs/api-reference/account-level/sites/skills/upload-a-website-or-html-files.md and publish them yourself, or send the user to https://www.wix.com/headless/drop?utm_campaign=mcp."
46011
46031
  );
46012
46032
  }
46013
46033
  const accountHeaders = await authStrategy.getAccountAuthHeaders();