@wix/agent-skills 1.34.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/package.json +1 -1
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-manage/SKILL.md +1 -1
- package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +2 -0
- package/skills/wix-manage/references/seo/manage-content-plan.md +207 -222
- package/skills/wix-manage/references/sites/upload-static-site.md +2 -1
- package/skills/wix-readme/SKILL.md +166 -0
package/README.md
CHANGED
|
@@ -75,6 +75,7 @@ npx skills add wix/skills -g
|
|
|
75
75
|
| [wix-docs](skills/wix-docs/SKILL.md) | Look up the Wix API/SDK docs (shared fallback) | Confirming an exact Wix endpoint, method schema, field, or enum before writing code — `curl` doc-search + the `.md`-twin trick, or the Wix MCP tools. Referenced by the other skills as their docs-lookup fallback |
|
|
76
76
|
| [wix-export](skills/wix-export/SKILL.md) | Export or create a Wix Studio 2 site | Exporting an existing Studio 2 site or creating a new one into its own folder, installing or signing in to the origami CLI only when that is missing, and continuing straight into the change the user asked for. Not for Wix Editor or Studio 1 sites, or for content and business changes (use wix-manage) |
|
|
77
77
|
| [wix-import](skills/wix-import/SKILL.md) | Import local site code into a Wix Studio 2 site | Saving an exported Origami site back to Wix, or bringing code from any other project into an existing or new Studio 2 site — sets up the origami CLI when missing, validates the files, and confirms what the import replaces before uploading images or saving. Not for Wix Editor or Studio 1 sites, or for content and business changes (use wix-manage) |
|
|
78
|
+
| [wix-readme](skills/wix-readme/SKILL.md) | Index of the plugin: its skills and the Wix MCP tools | Right after installing the plugin, or when asking what the plugin can do and which skill or tool fits a task |
|
|
78
79
|
| [wix-replatform](wix-replatform/README.md) | Migrate sites from WordPress and other platforms into Wix | Migrating an existing business from another platform into Wix. Both backend data and website. `npx skills add wix/skills/wix-replatform` |
|
|
79
80
|
|
|
80
81
|
## Supported Agents
|
package/package.json
CHANGED
|
@@ -50,7 +50,7 @@ Read and update SEO titles and tags at the right level. For "change my site's SE
|
|
|
50
50
|
"Retrieve, create, and delete URL redirects on a Wix site using the public SEO Redirects API. Covers exact and group redirects, language-scoped redirects for multilingual sites, bulk creates of up to 100 and bulk deletes of up to 500, and the change flow for a redirect that already exists. This API has no query, search, or update method: List Redirects is the only read-many. Redirects do not chain, so creating one that points at a path another redirect starts from permanently deletes that other redirect; list and check before every write."
|
|
51
51
|
|
|
52
52
|
### [Generate and Read a Wix Site's Content Plan](references/seo/manage-content-plan.md)
|
|
53
|
-
Generate an SEO content plan
|
|
53
|
+
Generate an SEO content plan for a Wix site, read suggested blog post topics and keywords, or diagnose and continue an existing stalled generation flow, including requests with missing flow identifiers.
|
|
54
54
|
|
|
55
55
|
### [Manage Google Search Console for a Wix Site](references/seo/manage-google-search-console.md)
|
|
56
56
|
"Connect a Wix site to Google Search Console and drive its setup through the public GSC Connection and Site Readiness APIs: check connection and readiness, start the Google authorization, verify ownership, add the property, submit the sitemap, request indexing, read search performance, run URL inspection, recover a stale connection, or disconnect. The site owner authorizes in their own browser via a single-use connect URL."
|
|
@@ -118,6 +118,8 @@ You have two endpoints:
|
|
|
118
118
|
}'
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
+
**With `publish: true`, the post is live once this call returns 200, even if the response reads `draftPost.status: "UNPUBLISHED"`.** The same response carries `changeOrigin: "PUBLISH"` and `hasUnpublishedChanges: false`. Do not call Publish Draft Post, search for a publish endpoint, or create the post again. To confirm it is live, read it back with [Get Post](https://dev.wix.com/docs/api-reference/business-solutions/blog/posts-stats/get-post): `GET https://www.wixapis.com/blog/v3/posts/{draftPost.id}` returns 200 with `post.id` equal to `draftPost.id` and a `post.firstPublishedDate`.
|
|
122
|
+
|
|
121
123
|
#### Bulk-create endpoint (preferred for multiple posts)
|
|
122
124
|
|
|
123
125
|
> **⚠️ Body shape — read this carefully. Each item in `draftPosts` is a FLAT post object: `{title, memberId, richContent, media?, ...}`. Do NOT wrap each item in a `draftPost` field.** Unlike the single-post endpoint (which uses `{draftPost: {...}}` because the request is one post), the bulk endpoint puts each post DIRECTLY inside the `draftPosts` array.
|
|
@@ -1,293 +1,278 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "Generate and Read a Wix Site's Content Plan"
|
|
3
|
-
description: "Generate an SEO content plan
|
|
3
|
+
description: "Generate an SEO content plan for a Wix site, read suggested blog post topics and keywords, or diagnose and continue an existing stalled generation flow, including requests with missing flow identifiers."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Generate and Read a Wix Site's Content Plan
|
|
7
7
|
|
|
8
|
-
A
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
4. After Create Content Plan succeeds, retain its returned flow ID and
|
|
45
|
-
[check until SUCCESS](#4-poll-until-success), then
|
|
46
|
-
[read the briefs](#5-read-the-briefs). Do not trigger a replacement or release
|
|
47
|
-
a successful flow just to retrieve its results.
|
|
48
|
-
|
|
49
|
-
## Generate a new plan
|
|
50
|
-
|
|
51
|
-
When the user requests a new plan, follow these steps in order. The request and
|
|
52
|
-
response examples for each step are in [API steps](#api-steps).
|
|
53
|
-
|
|
54
|
-
1. [Trigger](#1-trigger) once and retain the returned flow ID.
|
|
55
|
-
2. [Check the flow status](#2-poll-until-keyword_research) until `KEYWORD_RESEARCH`.
|
|
56
|
-
3. [Call Create Content Plan](#3-release-the-flow) once to continue generation.
|
|
57
|
-
4. [Check until SUCCESS](#4-poll-until-success).
|
|
58
|
-
5. [Read the briefs](#5-read-the-briefs) and report the actual returned topics.
|
|
59
|
-
|
|
60
|
-
Only Trigger and Create Content Plan write data in the generation path. Do not
|
|
61
|
-
change the site's business profile, name, description, categories, or publication
|
|
62
|
-
state to accelerate it. Those are separate tasks requiring real user data and
|
|
63
|
-
authorization. `CREATED` can mean queued work, not missing setup.
|
|
64
|
-
|
|
65
|
-
## Polling without losing progress
|
|
66
|
-
|
|
67
|
-
**One API execution makes one HTTP request and returns.** The sequence below
|
|
68
|
-
is a series of separate calls, with a decision after each response. It is not
|
|
69
|
-
one code block containing the entire workflow. Never wrap API calls in a
|
|
70
|
-
`for`/`while` loop, a timer, or a function that polls until a target status.
|
|
71
|
-
|
|
72
|
-
Retain each response's flow ID before the next call. Wait between status checks
|
|
73
|
-
using the client's supported waiting capability, outside the API execution;
|
|
74
|
-
do not assume timers exist inside that execution or busy-wait there.
|
|
75
|
-
|
|
76
|
-
Keep checking while work progresses. If waiting cannot continue, report the
|
|
77
|
-
flow ID and last observed status as incomplete; do not claim success or merely
|
|
78
|
-
promise to finish later. Identify trigger and release as writes if asked
|
|
79
|
-
whether an execution changes data.
|
|
80
|
-
|
|
81
|
-
## API steps
|
|
82
|
-
|
|
83
|
-
### 1. Trigger
|
|
8
|
+
A content plan contains suggested blog post briefs, not published posts.
|
|
9
|
+
`contentPlanFlowId` identifies the generation job, not the site.
|
|
10
|
+
|
|
11
|
+
For an existing job, require its `contentPlanFlowId` before any API call. Ask
|
|
12
|
+
for it; if no user can answer, report incomplete and stop. A site ID, an ID-less
|
|
13
|
+
flow GET or the latest successful flow cannot identify the user's job. Explain
|
|
14
|
+
that continuation follows [step 3](#3-check-research-and-release-once): check the
|
|
15
|
+
flow's own `keywordResearchId` research for `SUCCESS`, then release once only if
|
|
16
|
+
a fresh flow read still shows `KEYWORD_RESEARCH`.
|
|
17
|
+
|
|
18
|
+
`KEYWORD_RESEARCH` means research has started, not finished. Some flows advance
|
|
19
|
+
automatically; `CONTENT_PLAN` or `SUCCESS` needs no release. Polling alone does
|
|
20
|
+
not release a flow that is waiting for Create Content Plan.
|
|
21
|
+
|
|
22
|
+
Use the selected site's authorization context. Writes require **Manage SEO
|
|
23
|
+
Settings**; execute them when the user requests the change or confirms it. Never
|
|
24
|
+
change business data or publication state just to accelerate generation.
|
|
25
|
+
|
|
26
|
+
Use only IDs and values that the API returned or the user supplied; every example
|
|
27
|
+
value is a placeholder. If a request tool needs `siteId`, use the selected or
|
|
28
|
+
supplied site ID, never `contentPlanFlowId`.
|
|
29
|
+
|
|
30
|
+
Each path below is the endpoint shown on its linked public reference, except
|
|
31
|
+
Get Site Keyword Research, whose own page is not public yet (see
|
|
32
|
+
[step 3](#read-the-matching-research)). All use the
|
|
33
|
+
`https://www.wixapis.com/seo-content-plan-service/v1` base. Every call here was
|
|
34
|
+
sent live on this base. Trigger, Get Content Plan Flow, Get Site Keyword
|
|
35
|
+
Research, List Blog Post Candidates and List Keyword Research Items returned
|
|
36
|
+
data. Create Content Plan and Update Keyword Research Item were sent with IDs
|
|
37
|
+
that match no record and returned the service's own errors (for example
|
|
38
|
+
`CONTENT_PLAN_FLOW_NOT_FOUND`), not a missing-route error. A `404` on one of
|
|
39
|
+
these paths is an error to report, not a reason to try another base.
|
|
40
|
+
|
|
41
|
+
## 1. Trigger or inspect an existing flow
|
|
42
|
+
|
|
43
|
+
For new generation, trigger once:
|
|
84
44
|
|
|
85
45
|
```
|
|
86
|
-
POST https://www.wixapis.com/
|
|
46
|
+
POST https://www.wixapis.com/seo-content-plan-service/v1/content-plan-flows/trigger
|
|
87
47
|
{}
|
|
88
48
|
```
|
|
89
49
|
|
|
90
|
-
Response:
|
|
50
|
+
Response: `{ "contentPlanFlowId": "<flow-uuid>" }`. Save the ID.
|
|
51
|
+
[Trigger Content Plan Generation Flow](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-content-plan-flow-v1/trigger-content-plan-generation-flow).
|
|
91
52
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
```
|
|
53
|
+
For an existing flow, apply the entry gate above. Keep its ID, last observed
|
|
54
|
+
status and release history for a later resume.
|
|
95
55
|
|
|
96
|
-
|
|
97
|
-
substitute actual returned values before making requests. Return this response
|
|
98
|
-
and end this execution here. Save the ID before making any status request.
|
|
99
|
-
Do not append step 2 to the trigger script.
|
|
100
|
-
See [Trigger Content Plan Generation Flow](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-content-plan-flow-v1/trigger-content-plan-generation-flow).
|
|
101
|
-
|
|
102
|
-
### 2. Poll until KEYWORD_RESEARCH
|
|
56
|
+
## 2. Read status with bounded waiting
|
|
103
57
|
|
|
104
58
|
```
|
|
105
|
-
GET https://www.wixapis.com/
|
|
59
|
+
GET https://www.wixapis.com/seo-content-plan-service/v1/content-plan-flows/{contentPlanFlowId}
|
|
106
60
|
```
|
|
107
61
|
|
|
108
|
-
|
|
109
|
-
`for`/`while` loop and no timer. Repeat it as a separate call when another
|
|
110
|
-
status check is needed. Keep the response compact: flow ID and status suffice.
|
|
111
|
-
|
|
112
|
-
Example response, showing the public flow fields (optional fields may be absent):
|
|
62
|
+
Read nested `contentPlanFlow.status`. Example:
|
|
113
63
|
|
|
114
64
|
```json
|
|
115
65
|
{
|
|
116
66
|
"contentPlanFlow": {
|
|
117
67
|
"id": "<flow-uuid>",
|
|
118
|
-
"createdAt": "2026-09-08T10:00:00.000Z",
|
|
119
|
-
"updatedAt": "2026-09-08T10:01:00.000Z",
|
|
120
68
|
"status": "KEYWORD_RESEARCH",
|
|
121
|
-
"
|
|
122
|
-
"summaryId": "<summary-uuid>",
|
|
123
|
-
"keywordResearchId": "<keyword-research-uuid>"
|
|
69
|
+
"keywordResearchId": "<research-uuid>"
|
|
124
70
|
}
|
|
125
71
|
}
|
|
126
72
|
```
|
|
127
73
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
74
|
+
Pacing:
|
|
75
|
+
|
|
76
|
+
1. The first check needs no pause. Set an end time with a supported clock: five
|
|
77
|
+
minutes by default, or a shorter runtime limit or user-requested window.
|
|
78
|
+
2. Between checks, wait about 15 seconds with the client's supported delay. Use
|
|
79
|
+
a separate wait or scheduling tool if one exists. Only if you run code
|
|
80
|
+
yourself and have no such tool, put one awaited sleep of about 15 seconds in
|
|
81
|
+
that code, before its single GET (for example,
|
|
82
|
+
`await new Promise(r => setTimeout(r, 15000))` in JavaScript or
|
|
83
|
+
`time.sleep(15)` in Python). A sleep that is not awaited does not pause. With
|
|
84
|
+
neither a wait tool nor code execution, go to step 4. Sending checks back to
|
|
85
|
+
back with no pause is not pacing. This is client pacing, not an API rate
|
|
86
|
+
limit or a completion-time promise.
|
|
87
|
+
3. **Each execution makes one HTTP request and returns.** Before each later
|
|
88
|
+
check, confirm the pause fits the window and wait once. Then read the clock
|
|
89
|
+
again: if the window has ended, go to step 4 without sending. Otherwise send
|
|
90
|
+
one GET and read its result. Never loop requests, busy-wait, or use API or doc calls as a
|
|
91
|
+
pause; request counts and frozen `updatedAt` values do not measure time.
|
|
92
|
+
4. If no usable clock or waiting exists, or the window ends, report incomplete
|
|
93
|
+
with the saved ID, status and release history. Expiry does not prove failure.
|
|
94
|
+
End the turn for a later requested resume; do not restart automatically.
|
|
95
|
+
|
|
96
|
+
| Observed status | Action |
|
|
97
|
+
| --- | --- |
|
|
98
|
+
| `CREATED`, `SITE_ANALYSIS`, `SITE_SUMMARY` | Continue paced checks within the window. |
|
|
99
|
+
| `KEYWORD_RESEARCH` | Follow [Check research and release once](#3-check-research-and-release-once), within the same monitoring window. |
|
|
100
|
+
| `CONTENT_PLAN` | Continue paced checks; skip release. |
|
|
101
|
+
| `SUCCESS` | Stop waiting and read candidates. |
|
|
102
|
+
| `PENDING_REQUIREMENTS` | Stop; report the unmet requirement. Never invent site data. |
|
|
103
|
+
| `FAIL`, `CANCELED` | Report the ID and result, then stop. |
|
|
104
|
+
| Missing or unrecognized status | Report uncertainty; do not silently poll. |
|
|
133
105
|
|
|
134
|
-
|
|
135
|
-
states; decide from the returned value rather than requiring every transition.
|
|
136
|
-
Typical status progression: `CREATED` → `SITE_ANALYSIS` → `KEYWORD_RESEARCH`
|
|
137
|
-
→ **call Create Content Plan** → `CONTENT_PLAN` → `SUCCESS`.
|
|
106
|
+
[Get Content Plan Flow](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-content-plan-flow-v1/get-content-plan-flow).
|
|
138
107
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
| `KEYWORD_RESEARCH` | Waiting for Create Content Plan. Release once when generation is requested. |
|
|
145
|
-
| `CONTENT_PLAN` | Generating briefs. Continue separate checks; do not release again. |
|
|
146
|
-
| `SUCCESS` | Ready. Read candidates in step 5. |
|
|
147
|
-
| `PENDING_REQUIREMENTS` | Missing business information. Stop polling and report the actual unmet requirement from evidence. Do not invent or update business data, or repeatedly trigger replacements. |
|
|
148
|
-
| `FAIL` | Generation failed. Report the flow ID and failure; do not silently start a replacement. |
|
|
149
|
-
| `CANCELED` | Canceled and cannot be resumed. Report it and stop. |
|
|
150
|
-
| `UNKNOWN` | No usable status. Inspect the response and report uncertainty instead of guessing progress. |
|
|
108
|
+
## 3. Check research and release once
|
|
109
|
+
|
|
110
|
+
Create Content Plan is an action on Blog Post Candidate, distinct from the
|
|
111
|
+
flow-status read. It requires matching research `SUCCESS`; elapsed time at this
|
|
112
|
+
stage proves neither readiness nor failure.
|
|
151
113
|
|
|
152
|
-
|
|
114
|
+
1. No `keywordResearchId` on the flow: report it missing and stop; do not guess it.
|
|
115
|
+
2. Read **that exact research** (below), not the latest research. Not `SUCCESS`
|
|
116
|
+
yet: pause, then read again.
|
|
117
|
+
3. Research `SUCCESS`: read the same flow again, with no extra delay.
|
|
118
|
+
4. Flow still `KEYWORD_RESEARCH` with the same research ID: [release once](#release-once).
|
|
119
|
+
`CONTENT_PLAN` or `SUCCESS`: skip release and follow the status. A changed
|
|
120
|
+
research ID: check the new research; the old success does not authorize it.
|
|
153
121
|
|
|
154
|
-
###
|
|
122
|
+
### Read the matching research
|
|
155
123
|
|
|
156
124
|
```
|
|
157
|
-
|
|
158
|
-
{ "contentPlanFlowId": "<flow-uuid>" }
|
|
125
|
+
GET https://www.wixapis.com/seo-content-plan-service/v1/site-keyword-research?keywordResearchId={keywordResearchId}
|
|
159
126
|
```
|
|
160
127
|
|
|
161
|
-
|
|
128
|
+
Require `siteKeywordResearch.id` and `contentPlanFlowId` to match the flow being
|
|
129
|
+
followed, then read `status`. Never omit the query ID: the ID-less read returns
|
|
130
|
+
the latest successful research, not this job's. Keyword-list items are not a
|
|
131
|
+
research-status check.
|
|
132
|
+
|
|
133
|
+
Minimal matching response:
|
|
162
134
|
|
|
163
135
|
```json
|
|
164
136
|
{
|
|
165
|
-
"
|
|
166
|
-
|
|
137
|
+
"siteKeywordResearch": {
|
|
138
|
+
"id": "<research-uuid>",
|
|
139
|
+
"status": "SUCCESS",
|
|
140
|
+
"contentPlanFlowId": "<flow-uuid>"
|
|
141
|
+
}
|
|
167
142
|
}
|
|
168
143
|
```
|
|
169
144
|
|
|
170
|
-
|
|
145
|
+
This check is the published procedure: the [Create Content Plan reference](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-blog-post-candidate-v1/create-content-plan)
|
|
146
|
+
says to poll Get Site Keyword Research with the flow's `keywordResearchId` until
|
|
147
|
+
`SUCCESS`, then re-read the flow before releasing, and the
|
|
148
|
+
[Get Content Plan Flow reference](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-content-plan-flow-v1/get-content-plan-flow)
|
|
149
|
+
says the same.
|
|
171
150
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
151
|
+
Get Site Keyword Research itself is a BETA method with no public reference page
|
|
152
|
+
of its own. It requires `wix-seo.read`. The query parameter, response fields and
|
|
153
|
+
statuses above match its API definition and live responses on this base.
|
|
154
|
+
|
|
155
|
+
**Fallback:** if this call fails, is unavailable, or returns a response without
|
|
156
|
+
the matching `id`, `contentPlanFlowId` and a `status` shown above, do not
|
|
157
|
+
release. Keep paced flow reads only: a flow that reaches `CONTENT_PLAN` or
|
|
158
|
+
`SUCCESS` needs no release; one still at `KEYWORD_RESEARCH` when the window ends
|
|
159
|
+
is reported incomplete with its IDs. This follows the Create Content Plan
|
|
160
|
+
reference, which requires research `SUCCESS` before release.
|
|
161
|
+
|
|
162
|
+
### Release once
|
|
163
|
+
|
|
164
|
+
When the user requested generation or continuation, and no release has already
|
|
165
|
+
been attempted for this flow, call Create Content Plan **once**:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
POST https://www.wixapis.com/seo-content-plan-service/v1/create-content-plan
|
|
169
|
+
{ "contentPlanFlowId": "<flow-uuid>" }
|
|
177
170
|
```
|
|
178
171
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
172
|
+
Minimal response examples:
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{ "success": true, "contentPlanFlowId": "<returned-flow-uuid>" }
|
|
176
|
+
```
|
|
183
177
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
flow it regenerates a plan under a new flow ID.
|
|
188
|
-
See [Create Content Plan](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-blog-post-candidate-v1/create-content-plan).
|
|
178
|
+
```json
|
|
179
|
+
{ "success": false, "message": "<failure-message>" }
|
|
180
|
+
```
|
|
189
181
|
|
|
190
|
-
|
|
182
|
+
Record the attempt before sending. Concurrent/repeated calls can duplicate plans.
|
|
183
|
+
If release history is uncertain, ask rather than send another POST. Check HTTP
|
|
184
|
+
status and response `success`; `false` requires reporting `message`, not claiming
|
|
185
|
+
completion. On HTTP `428` with application code
|
|
186
|
+
`FLOW_NOT_READY_FOR_CONTENT_PLAN` (listed in the Create Content Plan reference's
|
|
187
|
+
errors), inspect the error and make a paced
|
|
188
|
+
status recheck; do not retry the POST in a loop. Other errors or an
|
|
189
|
+
uncertain response require reporting the attempt, not repeating it.
|
|
190
|
+
|
|
191
|
+
On success, retain the returned `contentPlanFlowId` and monitor it with the same
|
|
192
|
+
bounded, single-request approach. A different returned ID is a separate flow;
|
|
193
|
+
explain that and never claim the original completed. Completion still requires
|
|
194
|
+
observed `SUCCESS` and returned candidates. Do not release an already successful
|
|
195
|
+
flow to recover it: that action regenerates a separate plan.
|
|
196
|
+
[Create Content Plan](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-blog-post-candidate-v1/create-content-plan).
|
|
197
|
+
|
|
198
|
+
### Edge cases
|
|
199
|
+
|
|
200
|
+
| Situation | Action |
|
|
201
|
+
| --- | --- |
|
|
202
|
+
| Research briefly not found | The flow can link the ID before its research record exists. Read again after a pause within the window, then inspect the flow if it persists; do not release or restart. |
|
|
203
|
+
| Research `FAIL`, `CANCELED`, `REVERTED`, missing/unknown status, or mismatched IDs | Stop and report the result; no release or replacement. |
|
|
204
|
+
| Get Site Keyword Research unavailable | Keep the error and IDs. Continue paced flow reads only: `CONTENT_PLAN`/`SUCCESS` needs no release; still `KEYWORD_RESEARCH` when the window ends means report incomplete, because readiness cannot be verified. Never release from flow status or keyword-list items. |
|
|
205
|
+
| Authorization denied or other error | Report the specific error and keep the IDs; no private fallback or readiness guess. |
|
|
191
206
|
|
|
192
|
-
|
|
193
|
-
response's flow ID and returning after each check. Typical status progression:
|
|
194
|
-
`CONTENT_PLAN` → `SUCCESS`. Read candidates in a subsequent execution after
|
|
195
|
-
observing `SUCCESS`.
|
|
207
|
+
## 4. Read and present briefs
|
|
196
208
|
|
|
197
|
-
|
|
209
|
+
Only after observing `SUCCESS` for the same flow:
|
|
198
210
|
|
|
199
211
|
```
|
|
200
|
-
GET https://www.wixapis.com/
|
|
212
|
+
GET https://www.wixapis.com/seo-content-plan-service/v1/content-plan-flows/{contentPlanFlowId}/blog-post-candidates
|
|
201
213
|
```
|
|
202
214
|
|
|
203
|
-
|
|
215
|
+
Omit `paging` to return all candidates. Read titles and keywords from `briefData`:
|
|
204
216
|
|
|
205
217
|
```json
|
|
206
218
|
{
|
|
207
|
-
"blogPostCandidates": [
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
"
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
"pageUrl": "https://www.example.com/mugs"
|
|
215
|
-
}
|
|
219
|
+
"blogPostCandidates": [{
|
|
220
|
+
"id": "<candidate-id>",
|
|
221
|
+
"briefData": {
|
|
222
|
+
"h1Title": "How to Care for Handmade Ceramic Mugs",
|
|
223
|
+
"keyword": "ceramic mug care",
|
|
224
|
+
"mainKeyword": "handmade ceramic mugs",
|
|
225
|
+
"pageUrl": "https://www.example.com/mugs"
|
|
216
226
|
}
|
|
217
|
-
],
|
|
218
|
-
"pagingMetadata": { "count": 1, "
|
|
227
|
+
}],
|
|
228
|
+
"pagingMetadata": { "count": 1, "hasNext": false }
|
|
219
229
|
}
|
|
220
230
|
```
|
|
221
231
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
keyword: candidate.briefData?.keyword,
|
|
233
|
-
mainKeyword: candidate.briefData?.mainKeyword,
|
|
234
|
-
supportingPageUrl: candidate.briefData?.pageUrl
|
|
235
|
-
}));
|
|
236
|
-
```
|
|
232
|
+
The final reply must give the flow ID, observed completion and count,
|
|
233
|
+
followed by a table with **Title | Keyword | Main keyword | Supporting URL**.
|
|
234
|
+
Populate all four columns from `briefData`, with clickable supporting URLs;
|
|
235
|
+
a titles-only or titles/main-keywords table is incomplete. Label any shortened subset.
|
|
236
|
+
Absent fields are unavailable; do not invent them. `pageUrl` supports an existing
|
|
237
|
+
page, not a newly published post. Explain weak or repetitive results honestly;
|
|
238
|
+
successful generation does not establish editorial quality or promise rankings.
|
|
239
|
+
[List Blog Post Candidates](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-blog-post-candidate-v1/list-blog-post-candidates).
|
|
240
|
+
|
|
241
|
+
## Editing keywords after completion (optional)
|
|
237
242
|
|
|
238
|
-
|
|
239
|
-
not the URL of a newly published blog post. Generation creates briefs, not
|
|
240
|
-
published posts. Do not read `candidate.title`, `candidate.keyword`, or
|
|
241
|
-
`candidate.pageUrl`, or infer missing data from those nonexistent top-level
|
|
242
|
-
fields. If a nested field is absent, report it as unavailable and inspect the
|
|
243
|
-
raw candidate before making another request. Report the actual returned
|
|
244
|
-
titles and available keywords/supporting page URLs. Do not invent briefs or
|
|
245
|
-
claim completion from the release response.
|
|
246
|
-
See [List Blog Post Candidates](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-blog-post-candidate-v1/list-blog-post-candidates).
|
|
247
|
-
|
|
248
|
-
### Present the result
|
|
249
|
-
|
|
250
|
-
Start with the flow ID, observed `SUCCESS` status, and returned candidate count.
|
|
251
|
-
Use a compact table with one row per topic: suggested title, target keyword,
|
|
252
|
-
main keyword, and supporting page URL. Include the actual returned URL as a
|
|
253
|
-
link; do not merely say that each brief contains a URL. Avoid repeating SEO
|
|
254
|
-
titles and descriptions unless requested. If the answer must be shortened,
|
|
255
|
-
label the displayed subset and total explicitly instead of claiming to show all
|
|
256
|
-
topics. These are AI-generated suggestions; do not promise rankings or traffic.
|
|
257
|
-
Assess the returned topics before recommending them: if they are repetitive,
|
|
258
|
-
mostly restate the site name, or lack a clear connection to the site's business,
|
|
259
|
-
say so plainly. Successful generation does not establish editorial quality.
|
|
260
|
-
Still show the actual results; do not silently replace weak titles with invented
|
|
261
|
-
ones or call them optimized without evidence. Explain what business context
|
|
262
|
-
would help assess or refine them, without modifying the site's settings.
|
|
263
|
-
|
|
264
|
-
## Editing keywords (optional)
|
|
265
|
-
|
|
266
|
-
After step 2, before or after step 3, read the keywords:
|
|
243
|
+
After observed flow `SUCCESS`, read research once:
|
|
267
244
|
|
|
268
245
|
```
|
|
269
|
-
GET https://www.wixapis.com/
|
|
246
|
+
GET https://www.wixapis.com/seo-content-plan-service/v1/content-plan-keyword-research-items
|
|
270
247
|
```
|
|
271
248
|
|
|
272
|
-
|
|
249
|
+
No parameters are required; omit optional `paging` for all items. Match returned
|
|
250
|
+
`keywordResearchId` to the completed flow and use returned `keywordResearchItems`
|
|
251
|
+
item IDs before editing. A mismatch or HTTP `404` is not permission to edit or
|
|
252
|
+
retry immediately. This is a post-completion read, not a pre-completion readiness
|
|
253
|
+
test.
|
|
254
|
+
The list is site-scoped and returns the latest research, not per-research status.
|
|
255
|
+
Its reserved `contentPlanFlowId` query field is ignored; it cannot target an older
|
|
256
|
+
flow or prove that flow's readiness.
|
|
257
|
+
[List Keyword Research Items](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-keyword-research-v1/list-keyword-research-items).
|
|
258
|
+
|
|
259
|
+
Only `keyword` and `mainKeyword` are writable, using a field mask.
|
|
260
|
+
Set `mainKeyword: true` to promote an existing item. Whether `false` demotes one
|
|
261
|
+
is not verified; do not rely on it, and read the item back after any change.
|
|
262
|
+
[Update Keyword Research Item](https://dev.wix.com/docs/api-reference/business-management/seo/content-plan-keyword-research-v1/update-keyword-research-item).
|
|
263
|
+
|
|
264
|
+
List uses `content-plan-keyword-research-items`, while Update uses
|
|
265
|
+
`keyword-research-items/{itemId}`. Preserve that difference. Use the returned
|
|
266
|
+
`item.id` for `{itemId}` and the same value in the Update body.
|
|
273
267
|
|
|
274
268
|
```
|
|
275
|
-
PATCH https://www.wixapis.com/
|
|
269
|
+
PATCH https://www.wixapis.com/seo-content-plan-service/v1/keyword-research-items/{itemId}
|
|
276
270
|
{
|
|
277
|
-
"keywordResearchId": "
|
|
278
|
-
"item": { "id": "
|
|
271
|
+
"keywordResearchId": "<research-uuid>",
|
|
272
|
+
"item": { "id": "<item-id>", "keyword": "new keyword" },
|
|
279
273
|
"fieldMask": "keyword"
|
|
280
274
|
}
|
|
281
275
|
```
|
|
282
276
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
durable across generations.
|
|
286
|
-
|
|
287
|
-
## Do not
|
|
288
|
-
|
|
289
|
-
- Poll forever without calling Create Content Plan (step 3).
|
|
290
|
-
- Read candidates before `SUCCESS`.
|
|
291
|
-
- Retry after `PENDING_REQUIREMENTS`.
|
|
292
|
-
- Ask for a site ID.
|
|
293
|
-
- Retry after a 403 — the caller lacks **Manage SEO Settings**.
|
|
277
|
+
The copy-on-write response can return a new `keywordResearchId`; use it for the
|
|
278
|
+
next write. Edits do not persist across generations.
|
|
@@ -211,7 +211,8 @@ route takes it. The site stays the same, at the same URL, now server-rendered.
|
|
|
211
211
|
- **From a shell, without attachments:** two calls. `{ siteId, prepare: true, size }`
|
|
212
212
|
with the ZIP's `size` (`wc -c < build.zip`) answers with `curl` commands for
|
|
213
213
|
the build ZIP and, when the site's repository takes it, a source ZIP; run them
|
|
214
|
-
as given, then make the second call it names
|
|
214
|
+
as given, then make the second call it names:
|
|
215
|
+
`{ siteId, uploadKey, sourceUploadId?, expectedHeadRevisionId?, releaseNotes? }`. A 404 on the
|
|
215
216
|
second call means the upload URL expired: prepare again. A prepared upload is
|
|
216
217
|
finished by that second call and by nothing else: a release made another way
|
|
217
218
|
(the ZIP attached, say) leaves the prepared upload behind and releases without
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wix-readme
|
|
3
|
+
description: "What the Wix plugin holds and how to work with Wix through it: the flow the Wix MCP README returns, an index of the plugin's skills with what each does, and the Wix MCP tools with what each does. Use when the plugin was just installed or when the user asks what the Wix plugin can do or which skill or tool fits a task."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# The Wix plugin
|
|
7
|
+
|
|
8
|
+
The plugin is two things: skills, folders of instructions and shipped code for building on Wix, each with a `SKILL.md` at its root; and the Wix MCP server at `https://mcp.wix.com/mcp`, whose tools read and change the user's Wix sites and account. The skills say how; the tools do.
|
|
9
|
+
|
|
10
|
+
## How to work with Wix through the plugin
|
|
11
|
+
|
|
12
|
+
Every Wix task ends in one of two places: a call made now with the user's account, or code the user keeps that makes the same calls (an app, a headless site, a script). The way there is the same.
|
|
13
|
+
|
|
14
|
+
1. **Start with `WixREADME`**, once per conversation. It returns this flow in full and the account's sites with their installed apps.
|
|
15
|
+
2. **Pick the site.** The `siteId` comes from the site context; when several fit, ask. A business solution's API works only on a site with that app installed, and an app's version changes its endpoints, so check the site's apps first.
|
|
16
|
+
3. **Find the method.** The first source that gives it: an earlier tool result in the conversation; else the skill that covers the task (the index below says what each is for), whose example is the model when it matches the case; else the docs, `SearchWixRESTDocumentation` or `BrowseWixRESTDocsMenu` for REST, the SDK, CLI, headless and apps searches for code, then `ReadFullDocsArticle` on the method's page.
|
|
17
|
+
4. **Get the exact shape.** A request is modeled on an example that matches the case: a skill's recipe or template, or the method's docs page, when it shows the fields the case needs. That is enough. The schema is for what no example shows: a field, an enum, a filter or sort key (a closed list per method). `SearchWixAPISpec` on the method's docs URL returns the request and response schemas, the REST URL and the JavaScript SDK call; `ReadFullDocsMethodSchema` when it is not available.
|
|
18
|
+
5. **Make the call, or write the code.** To do it now: `ExecuteWixAPI`, one function holding every step of the task, the reads and the writes they feed. For code the user keeps: write the call from the shape found in step 4, REST or SDK. `wix-headless-templates` is that code already written and verified, one folder per business solution, and `wix-headless-kit` builds a site on it.
|
|
19
|
+
|
|
20
|
+
Throughout: nothing Wix-specific from memory. Every URL, id, setting location, product fact, request shape and field name comes from a skill, the docs tools, an earlier tool result or the user.
|
|
21
|
+
|
|
22
|
+
## Creating a site
|
|
23
|
+
|
|
24
|
+
A new Wix site is written in code and uploaded. `StartDeployWebsite` returns the guide for a site the agent writes or files the user brought; `StartHeadlessBuild` returns the guide for a site that needs Wix business features (a store, bookings, a CMS, members, payments and the rest). Each guide creates the site, uploads it and says what comes next; call one and follow it.
|
|
25
|
+
|
|
26
|
+
What the guides stand on:
|
|
27
|
+
|
|
28
|
+
- **One site, created once**, by the provision call (`POST .../headless-business-setup/v1/headless-business/provision`, `origin: 'agent'`), which returns `metaSiteId`, the id every later call takes. A site made earlier is found with `ListWixSites` and uploaded to again; the URL never changes.
|
|
29
|
+
- **Static pages are dropped, a Wix Astro build is released.** A drop sends the complete file set each time. A build (`.wix/build-metadata.json` beside `dist/`) is released to Wix hosting, server-rendered, through `UploadHeadlessWebsiteFiles` only: as an attachment, or in two calls (`prepare: true` with the zip's `size`, then `uploadKey`) from a shell that reaches the internet. The project's source is stored with the release, and a later session continues the site from it.
|
|
30
|
+
- **`UploadHeadlessWebsiteFiles`** takes `siteId` and the files, as `attachments` or the `files` text bundle, and returns the live URL and the dashboard. Without the MCP, the same drop is a `curl` multipart call, with or without a login.
|
|
31
|
+
- **Business features** come from `wix-headless-kit`'s run on the same site and `appId`: apps installed and content seeded, the Astro project built from `wix-headless-templates`, the build released.
|
|
32
|
+
|
|
33
|
+
To read more: the recipe, `wix-manage/references/sites/upload-static-site.md` (https://www.wix.com/skills/wix-manage/references/sites/upload-static-site.md): the calls for every route, drop and release, finding and changing a site, the anonymous route, limits and failures. The cold start (https://www.wix.com/skills/headless-cold-start/headless-kit.md): the headless build from a cold environment to the released site.
|
|
34
|
+
|
|
35
|
+
## Two ways to Wix
|
|
36
|
+
|
|
37
|
+
### The plugin with the Wix MCP
|
|
38
|
+
|
|
39
|
+
The preferred way. The plugin's MCP configuration connects the Wix MCP server at `https://mcp.wix.com/mcp`; the client signs the user in on the first call and the tools below are in the tool list, with nothing to install. The flow above runs on them: `WixREADME` for the context, the documentation tools to find a method and its shape, `ExecuteWixAPI` to call it, `StartDeployWebsite` and `StartHeadlessBuild` with `UploadHeadlessWebsiteFiles` to create a site and put it live. The skills are read from the plugin's folder, and `ReadFullDocsArticle` reads them online when they are not there.
|
|
40
|
+
|
|
41
|
+
Context first:
|
|
42
|
+
|
|
43
|
+
| Tool | What it does |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `WixREADME` | The context every other tool assumes. Call it once per conversation before a Wix task; for another site later, call `GetSiteContext` instead. |
|
|
46
|
+
| `ListWixSites` | Lists the user's sites, with an optional name filter. Needs no `WixREADME` first. |
|
|
47
|
+
| `GetSiteContext` | Deep context for one site, by name or id: its apps, settings and data, as markdown. |
|
|
48
|
+
|
|
49
|
+
Building and deploying a site:
|
|
50
|
+
|
|
51
|
+
| Tool | What it does |
|
|
52
|
+
|---|---|
|
|
53
|
+
| `StartDeployWebsite` | Returns the guide to create a site on Wix and put files on it: HTML, CSS and JS, a static build, a zip, another builder's export. Updates keep the site and URL. Works with or without a Wix login. |
|
|
54
|
+
| `StartHeadlessBuild` | Returns the headless guide, for a site that needs Wix business features: a store, bookings, events, a restaurant menu, a blog, pricing plans, donations, forms, members, a CMS, payments. |
|
|
55
|
+
| `UploadHeadlessWebsiteFiles` | The upload step of those two guides: puts a static site or a Wix Astro build onto an existing Wix Headless site by its metaSiteId, as files, as attachments, or in two calls with presigned URLs. |
|
|
56
|
+
| `GetSuggestedDomains` | Domain name suggestions for a site. |
|
|
57
|
+
|
|
58
|
+
Calling Wix APIs:
|
|
59
|
+
|
|
60
|
+
| Tool | What it does |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `ExecuteWixAPI` | Reads and changes a site's or account's data with one JavaScript function over the Wix REST API: chained calls, pagination, loops, the reads that feed the writes. The preferred way to call Wix APIs. |
|
|
63
|
+
| `SearchWixAPISpec` | Inspects the Wix REST API spec and each method's JavaScript SDK call by running JavaScript against the index: the exact request and response shape, enums, the SDK import and signature. |
|
|
64
|
+
|
|
65
|
+
Documentation:
|
|
66
|
+
|
|
67
|
+
| Tool | What it does |
|
|
68
|
+
|---|---|
|
|
69
|
+
| `SearchWixRESTDocumentation` | Searches the Wix REST API docs. The starting point for finding an endpoint. |
|
|
70
|
+
| `BrowseWixRESTDocsMenu` | Browses the REST docs as a menu, category by category. |
|
|
71
|
+
| `SearchWixSDKDocumentation` | Searches the Wix JavaScript SDK docs. |
|
|
72
|
+
| `SearchWixHeadlessDocumentation` | Searches the Wix Headless docs. |
|
|
73
|
+
| `SearchWixCLIDocumentation` | Searches the Wix CLI docs: commands, local development, authentication. |
|
|
74
|
+
| `SearchWixWDSDocumentation` | Searches the Wix Design System docs. |
|
|
75
|
+
| `SearchBuildAppsDocumentation` | Searches the Wix Build Apps docs. |
|
|
76
|
+
| `SearchDevelopmentDocumentation` | Broad Wix developer docs: platform concepts and guides, after the specific searches return nothing. |
|
|
77
|
+
| `SearchWixHelpCenter` | Searches the Wix Help Center: how site owners do things by hand in the dashboard and editors. |
|
|
78
|
+
| `ReadFullDocsArticle` | Reads a page in full by URL: a docs article or method page, a skill's `SKILL.md` or any of its files, a Help Center article. |
|
|
79
|
+
| `ReadFullDocsMethodSchema` | The full request and response schema of one method, by its docs URL. |
|
|
80
|
+
|
|
81
|
+
Media and feedback:
|
|
82
|
+
|
|
83
|
+
| Tool | What it does |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `UploadImageToWixSite` | Uploads images to a site's Media Manager and returns their URLs and media ids. |
|
|
86
|
+
| `PickImagesForWixMedia` | Shows the user a file picker to upload images from their device to the Media Manager. |
|
|
87
|
+
| `ReportIssueToWix` | Reports one problem with Wix's tools, APIs or docs to the Wix team, when the user asks for it. |
|
|
88
|
+
|
|
89
|
+
### The Wix CLI
|
|
90
|
+
|
|
91
|
+
The other way, from a shell. `@wix/cli` is Wix's command-line tool: it signs in to a Wix account, creates and manages Wix projects on disk, a Wix app or a Wix Headless site, builds them and releases them to Wix, and mints tokens for REST calls. Its session lives on the machine. All as `npx @wix/cli@latest <command>`:
|
|
92
|
+
|
|
93
|
+
| Command | What it does |
|
|
94
|
+
|---|---|
|
|
95
|
+
| `login` | Signs in with a device code and writes the session to `~/.wix/auth/account.json`. |
|
|
96
|
+
| `whoami` | Shows the signed-in account. |
|
|
97
|
+
| `create` | Creates a Wix project with its site: for a headless site, the site, its OAuth app and hosting, and the project's `wix.config.json` (`siteId`, `appId`). |
|
|
98
|
+
| `env pull` | Writes the project's environment to `.env.local`: the site's client id and the values the build reads. |
|
|
99
|
+
| `build` | Builds the project for Wix: for an Astro site, `dist/` and `.wix/build-metadata.json`. |
|
|
100
|
+
| `release` | Releases the build to Wix; the site keeps its URL. |
|
|
101
|
+
| `token`, `token --site <siteId>` | Mints an admin token, account-scoped or site-scoped, for REST calls from a shell: `Authorization: Bearer <token>` (`wix-docs/references/CALLING.md`). |
|
|
102
|
+
|
|
103
|
+
`wix-headless-kit` builds a Wix Headless site through the MCP's tools or through the CLI; a CLI session already on the machine makes its run the CLI route, where `install/setup.mjs` runs `create`, and `build` then `release` put the site live.
|
|
104
|
+
|
|
105
|
+
Without the MCP, each tool is a plain HTTP call to the same backend. `wix-docs` covers these, with the request bodies, as its `curl` lane:
|
|
106
|
+
|
|
107
|
+
| Tool | Without the MCP |
|
|
108
|
+
|---|---|
|
|
109
|
+
| `SearchWixRESTDocumentation`, `SearchWixSDKDocumentation`, `SearchWixHeadlessDocumentation`, `SearchWixCLIDocumentation`, `SearchWixWDSDocumentation`, `SearchBuildAppsDocumentation`, `SearchDevelopmentDocumentation` | `POST https://www.wixapis.com/mcp-docs-search/v1/docs/search` (or `/search/markdown`) with `search_term` and the `document_type` of that corpus. |
|
|
110
|
+
| `BrowseWixRESTDocsMenu` | `POST https://www.wixapis.com/mcp-docs-search/v1/docs/menu/browse`. |
|
|
111
|
+
| `ReadFullDocsArticle` | Append `.md` to any `https://dev.wix.com/docs/...` URL; a skill's file is `https://www.wix.com/skills/<skill>/<path>`. |
|
|
112
|
+
| `SearchWixAPISpec`, `ReadFullDocsMethodSchema` | `POST https://mcp.wix.com/api/code-mode/search` with the same JavaScript. |
|
|
113
|
+
| `ExecuteWixAPI` | The REST call itself, to `https://www.wixapis.com`, with a token: which identity a method takes and how to mint the token are in `wix-docs/references/CALLING.md`. |
|
|
114
|
+
| `StartDeployWebsite`, `StartHeadlessBuild`, `UploadHeadlessWebsiteFiles` | `create`, `build` and `release` from a shell; the `wix-manage` recipe `references/sites/upload-static-site.md` creates a site and drops files over REST. |
|
|
115
|
+
|
|
116
|
+
## Skills
|
|
117
|
+
|
|
118
|
+
Each skill is a folder with a `SKILL.md` at its root that says what it does and which of its files to read when. A skill may already be on disk, in the plugin's folder or under `.agents/skills/<skill>/` after `npx skills add wix/skills`, or served by the client's skill tool; read it from there. Otherwise every file is online at `https://www.wix.com/skills/<skill>/<path>`, read with `ReadFullDocsArticle` or `curl`; `https://www.wix.com/skills/<skill>/` with the trailing slash lists the skill's files. Paths below are inside the skill's folder.
|
|
119
|
+
|
|
120
|
+
### wix-headless-kit
|
|
121
|
+
|
|
122
|
+
Online: https://www.wix.com/skills/wix-headless-kit/SKILL.md. On disk: the plugin's `skills/wix-headless-kit/`, or `.agents/skills/wix-headless-kit/`.
|
|
123
|
+
|
|
124
|
+
Builds a Wix Headless site on shipped, verified `@wix/sdk` code: one typed data layer, hooks, components, Astro pages and a seed script per Wix business solution, from `wix-headless-templates`. The agent designs the presentation on those hooks and releases to Wix hosting. Runs as a CLI flow from a shell, or as Wix API calls through the MCP.
|
|
125
|
+
|
|
126
|
+
**The cold start**, `wix-headless-cold-start/headless-kit.md` (https://www.wix.com/skills/headless-cold-start/headless-kit.md, what `StartHeadlessBuild` returns), takes a cold environment to where wix-headless-kit runs, then hands off to its `SKILL.md`. It measures three facts: the Wix MCP's tools in the tool list; Node 24.18 or later with `npm` reaching the registry; a way to get a build to `UploadHeadlessWebsiteFiles`, as an attachment or by `curl` to its upload URLs. The facts pick the route: all three, the plugin route (site through `ExecuteWixAPI`, Astro build here, release through the upload tool); MCP but no way to release a build, the API-call guide (`guides/api-run.md`, static pages in the upload tool's `files`); a Wix CLI session on the machine, the CLI route. The project folder comes first, with any handed-over files extracted into it. Skills on disk are used where they are; otherwise `CI=1 npx skills@latest add wix/skills --skill wix-headless-kit --skill wix-docs --skill wix-manage --yes`, then `node .agents/skills/wix-headless-kit/install/templates.mjs` for the templates, and `install/bootstrap.mjs` on the CLI route.
|
|
127
|
+
|
|
128
|
+
- `SKILL.md`: the steps of a build and the table of business solutions.
|
|
129
|
+
- `guides/api-run.md`: the whole run as Wix API calls through the MCP, for an agent with no shell or a shell that cannot reach Wix.
|
|
130
|
+
- `guides/capabilities.md`: which Wix product owns which feature, and what ships for it.
|
|
131
|
+
- `guides/existing-site.md`: a new frontend for a Wix site that already has its content, and continuing a site built in an earlier session.
|
|
132
|
+
- `guides/migration.md`: a site moving to code after "Go Headless" in its dashboard.
|
|
133
|
+
- `guides/reference-mode.md`: a stack that cannot run the shipped React code.
|
|
134
|
+
- `guides/feedback.md`: sending the user's feedback on building with Wix.
|
|
135
|
+
- `install/`: the scripts of a run (`setup.mjs`, `attach.mjs`, `deploy.mjs`, `install.mjs`, `templates.mjs`, `context.mjs`, `bootstrap.mjs`, `check.mjs`) and `pins.json`, the pinned CLI and templates versions.
|
|
136
|
+
|
|
137
|
+
### wix-headless-templates
|
|
138
|
+
|
|
139
|
+
Online: https://www.wix.com/skills/wix-headless-templates/SKILL.md. On disk: the plugin's `skills/wix-headless-templates/`, or `.agents/skills/wix-headless-templates/`.
|
|
140
|
+
|
|
141
|
+
The code wix-headless-kit builds from, one folder per business solution: `storefront`, `bookings`, `rentals`, `blog`, `cms`, `forms`, `members`, `events`, `restaurants`, `donations`, `pricing-plans`, `portfolio`, `faq`, plus `blank` and `shared`. Each folder holds:
|
|
142
|
+
|
|
143
|
+
- `INSTRUCTIONS.md`: the playbook, with the contracts.
|
|
144
|
+
- `app/`: the typed, framework-agnostic data layer over `@wix/sdk`, React hooks and reference components.
|
|
145
|
+
- `app-astro/`: the Astro pages with owner-editable SEO.
|
|
146
|
+
- `rest/`: the same data layer as plain REST calls, for a site without a bundler.
|
|
147
|
+
- `seed/`: the seed script that fills the site from a plan, `SEED.md` as the plan's contract, and a reader of what the site already holds.
|
|
148
|
+
- `project/`: the solution composed into the CLI's Astro scaffold.
|
|
149
|
+
|
|
150
|
+
`compose.mjs` at the root composes a solution's layers into a project.
|
|
151
|
+
|
|
152
|
+
### wix-manage
|
|
153
|
+
|
|
154
|
+
Online: https://www.wix.com/skills/wix-manage/SKILL.md. On disk: the plugin's `skills/wix-manage/`, or `.agents/skills/wix-manage/`.
|
|
155
|
+
|
|
156
|
+
REST recipes to configure and manage a site's business solutions, one recipe per task with the exact endpoints, request bodies and order of steps. `SKILL.md` is the index of every recipe by area, each a link. The recipes are under `references/<area>/`: `app-installation`, `stores`, `ecommerce`, `bookings`, `calendar`, `donations`, `get-paid`, `pricing-plans`, `restaurants`, `events`, `blog`, `cms`, `rich-content`, `forms`, `contacts`, `automations`, `marketing`, `google-ads`, `google-business-profile`, `analytics`, `seo`, `media`, `sites`, `domains`, `site-properties`, `collaborators`, `custom-apps`, `dashboard-navigation`, `accessibility`. Each recipe is also a docs article under its API's section.
|
|
157
|
+
|
|
158
|
+
### wix-docs
|
|
159
|
+
|
|
160
|
+
Online: https://www.wix.com/skills/wix-docs/SKILL.md. On disk: the plugin's `skills/wix-docs/`, or `.agents/skills/wix-docs/`.
|
|
161
|
+
|
|
162
|
+
Looks up the Wix API and SDK documentation to confirm an endpoint, method, request and response shape, field, enum or error before writing Wix code. `SKILL.md` has the two lanes, plain `curl` and the MCP's documentation tools, with the search, browse and read requests. `references/API_SPEC_SEARCH.md`: the spec index and its queries. `references/CALLING.md`: the identities a call runs as and how each token is minted. `references/EXTRACTING.md`: reading only the needed part of a big menu or method page with `curl` and `grep`.
|
|
163
|
+
|
|
164
|
+
### wix-readme
|
|
165
|
+
|
|
166
|
+
This index.
|