sbuilder-mcp 0.27.0 → 0.28.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/CHANGELOG.md CHANGED
@@ -6,6 +6,15 @@ All notable changes to this project are documented in this file.
6
6
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
7
7
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
8
 
9
+ ## [0.28.0] - 2026-09-10
10
+
11
+ ### Added
12
+ - The API catalog gained the platform's own image-search route, `GET /api/sites/{siteId}/images/search`, reachable through sb_api_call as well as through sb_media_upload.
13
+ - The API catalog gained the admin key-pool pair, `GET/POST /api/admin/image-keys`, for managing the platform's Pexels credentials.
14
+
15
+ ### Changed
16
+ - sb_media_upload's "search unavailable" instruction now names the admin Settings area's Pexels keys screen as the way to turn image search on, alongside the PEXELS_API_KEYS server variable, and notes that several keys are walked round-robin because the provider rate-limits per key.
17
+
9
18
  ## [0.27.0] - 2026-09-10
10
19
 
11
20
  ### Changed
package/CHANGELOG.vi.md CHANGED
@@ -6,6 +6,15 @@ Mọi thay đổi đáng chú ý của dự án được ghi lại trong file n
6
6
  Định dạng dựa trên [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
7
7
  và dự án tuân theo [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
8
 
9
+ ## [0.28.0] - 2026-09-10
10
+
11
+ ### Added
12
+ - Catalog API có thêm route tìm ảnh của chính nền tảng, `GET /api/sites/{siteId}/images/search`, gọi được qua sb_api_call cũng như qua sb_media_upload.
13
+ - Catalog API có thêm cặp quản lý pool key phía admin, `GET/POST /api/admin/image-keys`, để quản lý key Pexels của nền tảng.
14
+
15
+ ### Changed
16
+ - Chỉ dẫn "chưa cấu hình tìm ảnh" của sb_media_upload giờ nêu tên màn Cài đặt phía admin (khoá Pexels) như một cách bật tìm ảnh, bên cạnh biến môi trường PEXELS_API_KEYS trên server, và ghi chú rằng nhiều khoá được xoay vòng vì nhà cung cấp giới hạn theo từng khoá.
17
+
9
18
  ## [0.27.0] - 2026-09-10
10
19
 
11
20
  ### Changed
@@ -1,5 +1,5 @@
1
1
  export const SWAGGER_SOURCE = {
2
- "operations": 498,
2
+ "operations": 501,
3
3
  "definitions": 104,
4
4
  "bodyCarrying": 178,
5
5
  "bodyUndescribed": 64,
@@ -1211,6 +1211,32 @@ export const API_OPERATIONS = [
1211
1211
  "bodyRef": null,
1212
1212
  "credential": "siteScoped"
1213
1213
  },
1214
+ {
1215
+ "id": "get:/api/admin/image-keys",
1216
+ "method": "GET",
1217
+ "path": "/api/admin/image-keys",
1218
+ "tags": [
1219
+ "admin"
1220
+ ],
1221
+ "summary": "Manage the platform's Pexels credentials",
1222
+ "params": [],
1223
+ "bodyDescribed": false,
1224
+ "bodyRef": null,
1225
+ "credential": "siteScoped"
1226
+ },
1227
+ {
1228
+ "id": "post:/api/admin/image-keys",
1229
+ "method": "POST",
1230
+ "path": "/api/admin/image-keys",
1231
+ "tags": [
1232
+ "admin"
1233
+ ],
1234
+ "summary": "Manage the platform's Pexels credentials",
1235
+ "params": [],
1236
+ "bodyDescribed": false,
1237
+ "bodyRef": null,
1238
+ "credential": "siteScoped"
1239
+ },
1214
1240
  {
1215
1241
  "id": "get:/api/admin/plans/export",
1216
1242
  "method": "GET",
@@ -7542,6 +7568,55 @@ export const API_OPERATIONS = [
7542
7568
  "bodyRef": null,
7543
7569
  "credential": "siteScoped"
7544
7570
  },
7571
+ {
7572
+ "id": "get:/api/sites/{siteId}/images/search",
7573
+ "method": "GET",
7574
+ "path": "/api/sites/{siteId}/images/search",
7575
+ "tags": [
7576
+ "images"
7577
+ ],
7578
+ "summary": "Search stock photographs",
7579
+ "params": [
7580
+ {
7581
+ "name": "siteId",
7582
+ "in": "path",
7583
+ "required": true,
7584
+ "type": "string",
7585
+ "description": "Site ID"
7586
+ },
7587
+ {
7588
+ "name": "query",
7589
+ "in": "query",
7590
+ "required": true,
7591
+ "type": "string",
7592
+ "description": "What to search for"
7593
+ },
7594
+ {
7595
+ "name": "per_page",
7596
+ "in": "query",
7597
+ "required": false,
7598
+ "type": "integer",
7599
+ "description": "1-30, default 8"
7600
+ },
7601
+ {
7602
+ "name": "orientation",
7603
+ "in": "query",
7604
+ "required": false,
7605
+ "type": "string",
7606
+ "description": "landscape, portrait or square"
7607
+ },
7608
+ {
7609
+ "name": "locale",
7610
+ "in": "query",
7611
+ "required": false,
7612
+ "type": "string",
7613
+ "description": "Provider locale, e.g. vi-VN"
7614
+ }
7615
+ ],
7616
+ "bodyDescribed": false,
7617
+ "bodyRef": null,
7618
+ "credential": "siteScoped"
7619
+ },
7545
7620
  {
7546
7621
  "id": "get:/api/sites/{siteId}/integrations",
7547
7622
  "method": "GET",
@@ -1,10 +1,10 @@
1
1
  export const SHAPE_SOURCE = {
2
- "writeOperations": 218,
3
- "shaped": 168,
4
- "fromHandlers": 168,
2
+ "writeOperations": 219,
3
+ "shaped": 169,
4
+ "fromHandlers": 169,
5
5
  "fromSwaggerOnly": 0,
6
6
  "withReadOnly": 26,
7
- "structsRead": 1649
7
+ "structsRead": 1658
8
8
  };
9
9
  export const REQUEST_SHAPES = {
10
10
  "post:/api/sites/{siteId}/api-keys": {
@@ -4672,6 +4672,21 @@ export const REQUEST_SHAPES = {
4672
4672
  "source": "go",
4673
4673
  "goType": "(inline)"
4674
4674
  },
4675
+ "post:/api/admin/image-keys": {
4676
+ "fields": [
4677
+ {
4678
+ "name": "label",
4679
+ "type": "string"
4680
+ },
4681
+ {
4682
+ "name": "key",
4683
+ "type": "string",
4684
+ "note": "`key`, not `secret`: it is what Pexels's own dashboard calls the value the operator is copying, and a form field named for the thing you are pasting is one less thing to guess at."
4685
+ }
4686
+ ],
4687
+ "source": "go",
4688
+ "goType": "(inline)"
4689
+ },
4675
4690
  "post:/api/admin/translation-keys": {
4676
4691
  "fields": [
4677
4692
  {
@@ -11,8 +11,10 @@ export class SearchUnavailable extends Error {
11
11
  }
12
12
  export const NO_SEARCH_NEXT = 'This platform has no image search available, so find a photograph by your own means and pass ' +
13
13
  'its URL to sb_media_upload — the platform fetches it server-side and it lands in this site\'s ' +
14
- 'own library, never hotlinked. An operator enables the search by setting PEXELS_API_KEYS on the ' +
15
- 'server; the key belongs there rather than here, so one place holds it and one quota is spent.';
14
+ 'own library, never hotlinked. An operator turns the search on by adding a Pexels key in the ' +
15
+ 'admin Settings area (Pexels keys), or by setting PEXELS_API_KEYS on the server; several keys ' +
16
+ 'are walked round-robin, because that provider rate-limits per key. Either way the key lives ' +
17
+ 'there rather than here, so one place holds it and one quota is spent.';
16
18
  export async function searchStock(ctx, siteId, query, opts = {}) {
17
19
  const q = new URLSearchParams({ query, per_page: String(opts.perPage ?? 8) });
18
20
  if (opts.orientation)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sbuilder-mcp",
3
- "version": "0.27.0",
3
+ "version": "0.28.0",
4
4
  "description": "MCP server that designs and operates a Store Builder site — pages, data, theme and publish — through the platform's own API and live-edit protocol.",
5
5
  "mcpName": "io.github.vuluu2k/sbuilder-mcp",
6
6
  "type": "module",