multisite-cms-mcp 1.0.7 → 1.0.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"get-conversion-guide.d.ts","sourceRoot":"","sources":["../../src/tools/get-conversion-guide.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAugB1H;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD1E"}
1
+ {"version":3,"file":"get-conversion-guide.d.ts","sourceRoot":"","sources":["../../src/tools/get-conversion-guide.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAgoB1H;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD1E"}
@@ -61,10 +61,10 @@ Do NOT change it to \`/blog\`.
61
61
  Use the manifest's path configuration to maintain original URLs.`,
62
62
  structure: `# Package Structure
63
63
 
64
- Create a ZIP file with this exact structure:
64
+ Create a package with this structure (can be at repo root OR in a subfolder like cms_package/):
65
65
 
66
66
  \`\`\`
67
- website-package.zip
67
+ website-package/ # Can be at root or in a subfolder
68
68
  ├── manifest.json # Required: Defines pages and CMS templates
69
69
  ├── public/ # Static assets (CSS, JS, images, fonts)
70
70
  │ ├── css/
@@ -84,6 +84,26 @@ website-package.zip
84
84
  └── downloads.html
85
85
  \`\`\`
86
86
 
87
+ **SUPPORTED REPO STRUCTURES:**
88
+ \`\`\`
89
+ Option 1: CMS files at root
90
+ repo/
91
+ ├── manifest.json
92
+ ├── pages/
93
+ ├── public/
94
+ └── templates/
95
+
96
+ Option 2: CMS files in subfolder (e.g. for Next.js projects)
97
+ repo/
98
+ ├── app/ # Next.js app (ignored)
99
+ ├── cms_package/ # CMS files here
100
+ │ ├── manifest.json
101
+ │ ├── pages/
102
+ │ ├── public/
103
+ │ └── templates/
104
+ └── package.json
105
+ \`\`\`
106
+
87
107
  ## Folder Rules
88
108
 
89
109
  ### public/
@@ -122,7 +142,10 @@ website-package.zip
122
142
  "team": "templates/team.html",
123
143
  "teamPath": "/team",
124
144
  "downloads": "templates/downloads.html",
125
- "downloadsPath": "/downloads"
145
+ "downloadsPath": "/downloads",
146
+ "authorsIndex": "templates/authors_index.html",
147
+ "authorDetail": "templates/author_detail.html",
148
+ "authorsIndexPath": "/authors"
126
149
  },
127
150
  "defaultHeadHtml": "<!-- fonts, meta tags -->"
128
151
  }
@@ -144,6 +167,7 @@ Each page needs:
144
167
  - \`blogPostPath: "/resources"\` → Posts at /resources/post-slug
145
168
  - \`teamPath: "/about/team"\` → Team at /about/team
146
169
  - \`downloadsPath: "/library"\` → Downloads at /library
170
+ - \`authorsIndexPath: "/contributors"\` → Authors at /contributors, detail at /contributors/slug
147
171
 
148
172
  **IMPORTANT:** Match paths to the original site's URLs!
149
173
 
@@ -169,7 +193,7 @@ For dynamic collections beyond the built-ins:
169
193
  2. **Detail Templates** - Single item pages (blog_post.html)
170
194
  3. **Static Pages** - Fixed content with data-edit-key
171
195
 
172
- ## Index Template Pattern
196
+ ## Index Template Pattern (Blog List)
173
197
 
174
198
  \`\`\`html
175
199
  <main class="blog-page">
@@ -192,7 +216,15 @@ For dynamic collections beyond the built-ins:
192
216
  </main>
193
217
  \`\`\`
194
218
 
195
- ## Detail Template Pattern
219
+ **CRITICAL FIELD NAMES for blogs:**
220
+ - \`{{name}}\` = Post title (NOT {{title}})
221
+ - \`{{mainImage}}\` = Hero image (NOT {{coverImageUrl}})
222
+ - \`{{thumbnailImage}}\` = Preview image
223
+ - \`{{postSummary}}\` = Excerpt (NOT {{excerpt}})
224
+ - \`{{{postBody}}}\` = Content (NOT {{bodyHtml}}, uses TRIPLE braces)
225
+ - \`{{url}}\` = Generated link to detail page
226
+
227
+ ## Detail Template Pattern (Blog Post)
196
228
 
197
229
  \`\`\`html
198
230
  <article class="blog-post">
@@ -208,12 +240,101 @@ For dynamic collections beyond the built-ins:
208
240
  </div>
209
241
  {{/if}}
210
242
 
243
+ {{#if publishedAt}}
244
+ <time>{{publishedAt}}</time>
245
+ {{/if}}
246
+
211
247
  <div class="content">
212
248
  {{{postBody}}}
213
249
  </div>
214
250
  </article>
215
251
  \`\`\`
216
252
 
253
+ ## Team Template Pattern
254
+
255
+ \`\`\`html
256
+ <div class="team-grid">
257
+ {{#each team sort="order" order="asc"}}
258
+ <div class="team-member">
259
+ {{#if photo}}
260
+ <img src="{{photo}}" alt="{{name}}">
261
+ {{/if}}
262
+ <h3>{{name}}</h3>
263
+ {{#if role}}
264
+ <p class="role">{{role}}</p>
265
+ {{/if}}
266
+ {{#if bio}}
267
+ <div class="bio">{{{bio}}}</div>
268
+ {{/if}}
269
+ </div>
270
+ {{/each}}
271
+ </div>
272
+ \`\`\`
273
+
274
+ **CRITICAL FIELD NAMES for team:**
275
+ - \`{{name}}\` = Team member name
276
+ - \`{{role}}\` = Job title
277
+ - \`{{photo}}\` = Headshot (NOT {{picture}})
278
+ - \`{{{bio}}}\` = Biography (TRIPLE braces for HTML)
279
+ - \`{{order}}\` = Display order
280
+
281
+ ## Author Index Template Pattern
282
+
283
+ \`\`\`html
284
+ <div class="authors-grid">
285
+ {{#each authors}}
286
+ <div class="author-card">
287
+ {{#if picture}}
288
+ <img src="{{picture}}" alt="{{name}}">
289
+ {{/if}}
290
+ <h3><a href="{{url}}">{{name}}</a></h3>
291
+ {{#if bio}}
292
+ <div class="bio-excerpt">{{{bio}}}</div>
293
+ {{/if}}
294
+ </div>
295
+ {{/each}}
296
+ </div>
297
+ \`\`\`
298
+
299
+ ## Author Detail Template Pattern
300
+
301
+ \`\`\`html
302
+ <article class="author-profile">
303
+ {{#if picture}}
304
+ <img src="{{picture}}" alt="{{name}}" class="author-photo">
305
+ {{/if}}
306
+
307
+ <h1>{{name}}</h1>
308
+
309
+ {{#if bio}}
310
+ <div class="bio">{{{bio}}}</div>
311
+ {{/if}}
312
+
313
+ {{#if email}}
314
+ <a href="mailto:{{email}}">{{email}}</a>
315
+ {{/if}}
316
+
317
+ <!-- Posts by this author -->
318
+ <h2>Posts by {{name}}</h2>
319
+ {{#each blogs}}
320
+ {{#if (eq author.name ../name)}}
321
+ <article>
322
+ <h3><a href="{{url}}">{{name}}</a></h3>
323
+ <p>{{postSummary}}</p>
324
+ </article>
325
+ {{/if}}
326
+ {{/each}}
327
+ </article>
328
+ \`\`\`
329
+
330
+ **CRITICAL FIELD NAMES for authors:**
331
+ - \`{{name}}\` = Author name
332
+ - \`{{picture}}\` = Author photo (NOT {{photo}})
333
+ - \`{{{bio}}}\` = Biography (TRIPLE braces for HTML)
334
+ - \`{{email}}\` = Email address
335
+ - \`{{url}}\` = Link to author detail page
336
+ - Use \`{{#if (eq author.name ../name)}}\` to filter posts by current author
337
+
217
338
  ## Static Page Pattern
218
339
 
219
340
  \`\`\`html
@@ -68,7 +68,7 @@ When your site uses different URLs than the defaults:
68
68
  "downloadsPath": "/resources",
69
69
  "authorsIndex": "templates/contributors.html",
70
70
  "authorDetail": "templates/contributor.html",
71
- "authorsPath": "/contributors"
71
+ "authorsIndexPath": "/contributors"
72
72
  }
73
73
  }
74
74
  \`\`\`
@@ -1 +1 @@
1
- {"version":3,"file":"validate-manifest.d.ts","sourceRoot":"","sources":["../../src/tools/validate-manifest.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuH5E"}
1
+ {"version":3,"file":"validate-manifest.d.ts","sourceRoot":"","sources":["../../src/tools/validate-manifest.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoI5E"}
@@ -19,7 +19,7 @@ const cmsTemplatesSchema = zod_1.z.object({
19
19
  downloadsPath: zod_1.z.string().startsWith('/').optional(),
20
20
  authorsIndex: zod_1.z.string().optional(),
21
21
  authorDetail: zod_1.z.string().optional(),
22
- authorsPath: zod_1.z.string().startsWith('/').optional(),
22
+ authorsIndexPath: zod_1.z.string().startsWith('/').optional(),
23
23
  collectionPaths: zod_1.z.record(zod_1.z.string().startsWith('/')).optional(),
24
24
  }).optional();
25
25
  const manifestSchema = zod_1.z.object({
@@ -109,6 +109,17 @@ The manifest.json file is not valid JSON. Check for:
109
109
  if (templates.blogIndexPath !== templates.blogPostPath && templates.blogIndexPath && templates.blogPostPath) {
110
110
  warnings.push(`- blogIndexPath (${templates.blogIndexPath}) differs from blogPostPath (${templates.blogPostPath}) - usually these should match`);
111
111
  }
112
+ // Check for common author path mistake
113
+ if (templates.authorsPath && !templates.authorsIndexPath) {
114
+ warnings.push('- Found "authorsPath" but expected "authorsIndexPath" - rename to authorsIndexPath');
115
+ }
116
+ // Check author template consistency
117
+ if (templates.authorsIndex && !templates.authorsIndexPath) {
118
+ warnings.push('- authorsIndex template defined but no authorsIndexPath - will default to /authors');
119
+ }
120
+ if (templates.authorDetail && !templates.authorsIndex) {
121
+ warnings.push('- authorDetail template defined but no authorsIndex - authors need both templates');
122
+ }
112
123
  }
113
124
  // Build result
114
125
  let output = '';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "multisite-cms-mcp",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "MCP server for AI-assisted website conversion to CMS format. Provides validation, examples, and schema tools.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {