schemeog-mcp 3.6.2 → 3.7.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.
Files changed (3) hide show
  1. package/README.md +14 -121
  2. package/index.js +74 -348
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,18 +1,15 @@
1
- # SchemeOG MCP Server v3.6
1
+ # SchemeOG MCP Server v2.9
2
2
 
3
- MCP server for [Diagrams.love](https://diagrams.love) — create diagrams and flowcharts with AI.
3
+ MCP server for [SchemeOG Cloud](https://scheme.smartlaunchhub.com) — create diagrams and flowcharts with AI.
4
4
 
5
5
  ## Features
6
6
 
7
- - **21 commands** for schemas, projects, tags, versions, and import/export
8
- - **Version history**: View, restore, and create checkpoints for schemas
7
+ - **17 commands** for schemas, projects, tags, and import/export
9
8
  - **Auto-refresh**: Browser automatically reloads when MCP updates schema
10
9
  - **Smart positioning**: Existing elements keep their positions, new elements get auto-layout
11
10
  - **No coordinate conflicts**: MCP ignores x/y to prevent overlapping cards
12
- - **Shared links support**: Open schemas via public `/shared/` URLs (read-only)
13
- - **Large schema handling**: Automatic detection and preview for schemas >100 elements
14
11
 
15
- ## 21 Commands
12
+ ## 17 Commands
16
13
 
17
14
  ### Schemas (6 commands)
18
15
 
@@ -51,15 +48,6 @@ MCP server for [Diagrams.love](https://diagrams.love) — create diagrams and fl
51
48
  | `remove_tag` | Remove tag from schema |
52
49
  | `tag_element` | Assign/remove tag from element |
53
50
 
54
- ### Versions (4 commands)
55
-
56
- | Command | Description |
57
- |---------|-------------|
58
- | `list_versions` | List schema version history (auto-saves and manual checkpoints) |
59
- | `get_version` | Get full data of a specific version |
60
- | `restore_version` | Restore schema from a previous version (auto-backup before restore) |
61
- | `create_version` | Create manual checkpoint with optional comment |
62
-
63
51
  ## Installation
64
52
 
65
53
  ### Via npx (recommended)
@@ -72,7 +60,7 @@ npx schemeog-mcp
72
60
 
73
61
  ### 1. Get your token
74
62
 
75
- 1. Open https://diagrams.love
63
+ 1. Open https://scheme.smartlaunchhub.com
76
64
  2. Sign in with email
77
65
  3. Go to Profile
78
66
  4. Copy token from "Claude Code Integration" section
@@ -125,29 +113,6 @@ In `~/.claude.json` (or Cline settings):
125
113
  **Element types:**
126
114
  - `card` — regular process/action card
127
115
  - `condition` — decision point (diamond shape)
128
- - `ascii` — ASCII diagram card (renders monospace ASCII art)
129
-
130
- ### ASCII Card Type
131
-
132
- The `ascii` type renders ASCII diagrams inside a card with monospace font. Requires `asciiContent` field.
133
-
134
- ```json
135
- {
136
- "id": "flow-1",
137
- "type": "ascii",
138
- "title": "Request Flow",
139
- "asciiContent": "┌─────────┐ ┌─────────┐\n│ Request │────▶│ Process │\n└─────────┘ └─────────┘",
140
- "borderColor": "purple"
141
- }
142
- ```
143
-
144
- **ASCII card features:**
145
- - Monospace font rendering
146
- - Auto-calculated width/height based on content
147
- - Max 2000 characters for `asciiContent`
148
- - Default border color: purple
149
- - Supports box-drawing characters: `┌ ┐ └ ┘ ─ │ ├ ┤ ┬ ┴ ┼`
150
- - Supports arrows: `▶ ◀ ▼ ▲ → ← ↓ ↑`
151
116
 
152
117
  **Completion status (`completed`):**
153
118
  - `true` — card is marked as completed (done)
@@ -191,35 +156,6 @@ Connections are defined inside each element's `connections` array:
191
156
 
192
157
  **Line styles (`style`):** `solid` (default), `dashed`, `dotted`
193
158
 
194
- ### Connection Label Format
195
-
196
- **RULE:** All connection labels should be in `[square brackets]`
197
-
198
- This visually highlights transitions and user actions on the diagram:
199
-
200
- ```json
201
- {
202
- "connections": [
203
- {"to": "home", "label": "[Login]"},
204
- {"to": "register", "label": "[Register]"},
205
- {"to": "error", "label": "[Error]"},
206
- {"to": "success", "label": "[Success]"}
207
- ]
208
- }
209
- ```
210
-
211
- **Why square brackets:**
212
- - Clearly distinguishes action labels from regular text
213
- - Shows user actions/triggers on transitions
214
- - Consistent visual style across all schemas
215
-
216
- **Example in ASCII:**
217
- ```
218
- ┌───────────┐ [Login] ┌───────────┐
219
- │ Login │──────────▶│ Home │
220
- └───────────┘ └───────────┘
221
- ```
222
-
223
159
  ### Full schema example
224
160
 
225
161
  ```json
@@ -312,38 +248,15 @@ When you edit a schema via MCP while viewing it in the browser:
312
248
  You can open any schema by URL using `get_schema_by_url`:
313
249
 
314
250
  ```
315
- # Canvas URL (main format) — full access
316
- https://diagrams.love/canvas?schema=abc123
251
+ # Canvas URL (основной формат)
252
+ https://scheme.smartlaunchhub.com/canvas?schema=abc123
317
253
 
318
- # Shared link — read-only access
319
- https://diagrams.love/shared/xyz789
254
+ # Shared link
255
+ https://scheme.smartlaunchhub.com/shared/xyz789
320
256
  ```
321
257
 
322
258
  Just paste the URL and the MCP will extract the schema ID automatically.
323
259
 
324
- ### Shared Links (Read-Only)
325
-
326
- When you open a schema via `/shared/` URL:
327
- - ✅ You can **view** the schema content
328
- - ✅ You can **analyze** the structure
329
- - ✅ You can **count** elements and connections
330
- - ❌ You **cannot edit** — need access to original schema
331
-
332
- This is useful for:
333
- - Analyzing schemas shared by others
334
- - Answering questions about schema structure
335
- - Getting inspiration for your own diagrams
336
-
337
- ## Large Schema Handling
338
-
339
- For schemas with >100 elements or >50KB data:
340
-
341
- - `get_schema` shows first 5 elements as preview
342
- - `get_schema_by_url` shows statistics only
343
- - Full data available via `export_schema_to_json`
344
-
345
- This prevents context overflow in Claude Code when working with large diagrams.
346
-
347
260
  ## Schema Methodology
348
261
 
349
262
  Schema = complete tree of **ACTIONS** and **CONSEQUENCES**:
@@ -440,34 +353,14 @@ import_schema_from_json(
440
353
 
441
354
  ## Version History
442
355
 
443
- Full version control for your schemas:
444
-
445
- ### Commands
446
-
447
- ```
448
- # List all versions
449
- list_versions(schema_id: "xxx")
450
-
451
- # View specific version
452
- get_version(schema_id: "xxx", version_id: "yyy")
453
-
454
- # Restore from version (auto-backup before restore)
455
- restore_version(schema_id: "xxx", version_id: "yyy")
456
-
457
- # Create manual checkpoint
458
- create_version(schema_id: "xxx", comment: "Before refactoring")
459
- ```
460
-
461
- ### Features
462
-
463
- - **Auto-save**: Every schema change creates a version automatically
464
- - **Manual checkpoints**: Create named versions before important changes
465
- - **Safe restore**: Current state is backed up before any restore
466
- - **100 versions limit**: Old auto-saves are cleaned, manual checkpoints are preserved
356
+ MCP now automatically creates versions when updating schemas:
357
+ - Before each update via MCP, a snapshot is saved
358
+ - View version history in the web interface (History tab)
359
+ - Restore any previous version with one click
467
360
 
468
361
  ## Links
469
362
 
470
- - [Diagrams.love](https://diagrams.love)
363
+ - [SchemeOG Cloud](https://scheme.smartlaunchhub.com)
471
364
  - [GitLab](https://gitlab.com/serter2069/schemeog-mcp)
472
365
 
473
366
  ## License
package/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * SchemeOG MCP Server v3.0.0
4
+ * SchemeOG MCP Server v3.7.0
5
5
  *
6
- * MCP сервер для работы со схемами, проектами, тегами и версиями в SchemeOG Cloud.
6
+ * MCP сервер для работы со схемами, проектами и тегами в SchemeOG Cloud.
7
7
  *
8
8
  * Команды для схем:
9
9
  * - list_schemas: Список всех схем
@@ -29,12 +29,6 @@
29
29
  * - add_tag: Добавить тег в схему
30
30
  * - remove_tag: Удалить тег из схемы
31
31
  * - tag_element: Присвоить/убрать тег с элемента
32
- *
33
- * Команды для версий (история):
34
- * - list_versions: Список версий схемы
35
- * - get_version: Получить данные конкретной версии
36
- * - restore_version: Восстановить схему из версии
37
- * - create_version: Создать ручную версию (checkpoint)
38
32
  */
39
33
 
40
34
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
@@ -1176,137 +1170,6 @@ Claude урезает большие параметры, но file_path чита
1176
1170
  required: ["schema_id"],
1177
1171
  },
1178
1172
  },
1179
-
1180
- // ========== ВЕРСИИ ==========
1181
- {
1182
- name: "list_versions",
1183
- description: `Получить список версий (истории) схемы.
1184
-
1185
- Возвращает список всех сохранённых версий схемы — как автоматических (автосохранение),
1186
- так и ручных (созданных пользователем).
1187
-
1188
- Каждая версия содержит:
1189
- - id: уникальный ID версии
1190
- - versionNumber: номер версии (1, 2, 3...)
1191
- - createdAt: дата создания
1192
- - isManual: true если создана вручную, false если автосохранение
1193
- - comment: комментарий (только для ручных версий)
1194
- - elementsCount: количество элементов в этой версии
1195
-
1196
- Используй для:
1197
- - Просмотра истории изменений схемы
1198
- - Поиска версии для восстановления
1199
- - Аудита изменений`,
1200
- inputSchema: {
1201
- type: "object",
1202
- properties: {
1203
- schema_id: {
1204
- type: "string",
1205
- description: "ID схемы",
1206
- },
1207
- limit: {
1208
- type: "number",
1209
- description: "Максимальное количество версий (по умолчанию 50, максимум 100)",
1210
- },
1211
- offset: {
1212
- type: "number",
1213
- description: "Смещение для пагинации (по умолчанию 0)",
1214
- },
1215
- },
1216
- required: ["schema_id"],
1217
- },
1218
- },
1219
- {
1220
- name: "get_version",
1221
- description: `Получить данные конкретной версии схемы.
1222
-
1223
- Возвращает полные данные версии, включая:
1224
- - Все элементы на момент создания версии
1225
- - Все связи
1226
- - Viewport (позиция камеры)
1227
- - Метаданные (дата, автор, комментарий)
1228
-
1229
- Используй для:
1230
- - Просмотра содержимого конкретной версии перед восстановлением
1231
- - Сравнения версий
1232
- - Анализа изменений`,
1233
- inputSchema: {
1234
- type: "object",
1235
- properties: {
1236
- schema_id: {
1237
- type: "string",
1238
- description: "ID схемы",
1239
- },
1240
- version_id: {
1241
- type: "string",
1242
- description: "ID версии",
1243
- },
1244
- },
1245
- required: ["schema_id", "version_id"],
1246
- },
1247
- },
1248
- {
1249
- name: "restore_version",
1250
- description: `Восстановить схему из указанной версии.
1251
-
1252
- ⚠️ ВАЖНО: Перед восстановлением автоматически создаётся резервная копия текущего состояния!
1253
-
1254
- Процесс:
1255
- 1. Создаётся версия с текущим состоянием схемы (как backup)
1256
- 2. Данные схемы заменяются на данные из выбранной версии
1257
- 3. Позиция камеры (viewport) также восстанавливается
1258
-
1259
- Используй когда нужно:
1260
- - Откатить нежелательные изменения
1261
- - Восстановить случайно удалённые элементы
1262
- - Вернуться к предыдущей версии схемы`,
1263
- inputSchema: {
1264
- type: "object",
1265
- properties: {
1266
- schema_id: {
1267
- type: "string",
1268
- description: "ID схемы",
1269
- },
1270
- version_id: {
1271
- type: "string",
1272
- description: "ID версии для восстановления",
1273
- },
1274
- },
1275
- required: ["schema_id", "version_id"],
1276
- },
1277
- },
1278
- {
1279
- name: "create_version",
1280
- description: `Создать ручную версию (checkpoint) схемы.
1281
-
1282
- Используй для создания именованной точки восстановления перед важными изменениями.
1283
-
1284
- Параметры:
1285
- - schema_id: ID схемы (обязательно)
1286
- - comment: комментарий к версии (опционально, рекомендуется)
1287
-
1288
- Примеры комментариев:
1289
- - "Перед рефакторингом структуры"
1290
- - "Стабильная версия v1.0"
1291
- - "До добавления новых экранов"
1292
-
1293
- Автоматические версии создаются при каждом сохранении схемы.
1294
- Ручные версии отмечаются специальным флагом и не удаляются при очистке старых автосохранений.`,
1295
- inputSchema: {
1296
- type: "object",
1297
- properties: {
1298
- schema_id: {
1299
- type: "string",
1300
- description: "ID схемы",
1301
- },
1302
- comment: {
1303
- type: "string",
1304
- description: "Комментарий к версии (опционально, но рекомендуется)",
1305
- },
1306
- },
1307
- required: ["schema_id"],
1308
- },
1309
- },
1310
1173
  ];
1311
1174
 
1312
1175
  /**
@@ -1492,38 +1355,47 @@ async function handleTool(name, args) {
1492
1355
 
1493
1356
  const schema = result.schema;
1494
1357
 
1495
- // Проверяем размер данных для предупреждения о больших схемах
1358
+ // Проверяем размер данных
1496
1359
  const elementsCount = schema.data?.elements?.length || 0;
1497
1360
  const connectionsCount = schema.data?.connections?.length || 0;
1498
1361
  const dataSize = JSON.stringify(schema.data || {}).length;
1499
- const isLargeSchema = dataSize > 50000 || elementsCount > 100;
1500
1362
 
1501
- // Формируем вывод в зависимости от размера
1502
- let elementsText, connectionsText, sizeWarning;
1363
+ // Лимит: 50 элементов или 30KB
1364
+ const ELEMENTS_LIMIT = 50;
1365
+ const SIZE_LIMIT = 30000;
1366
+ const isLargeSchema = elementsCount > ELEMENTS_LIMIT || dataSize > SIZE_LIMIT;
1503
1367
 
1504
1368
  if (isLargeSchema) {
1505
- // Большая схема — выводим только краткую статистику и первые элементы
1506
- const previewElements = (schema.data?.elements || []).slice(0, 5);
1507
- elementsText = `⚠️ БОЛЬШАЯ СХЕМА: ${elementsCount} элементов, ~${Math.round(dataSize / 1024)}KB
1369
+ // Большая схема — НЕ выводим данные, только инструкцию
1370
+ return {
1371
+ content: [{
1372
+ type: "text",
1373
+ text: `⛔ СХЕМА СЛИШКОМ БОЛЬШАЯ ДЛЯ ПРЯМОГО ЧТЕНИЯ
1374
+
1375
+ Схема "${schema.name}"
1376
+ ID: ${schema.id}
1377
+ Элементов: ${elementsCount} (лимит: ${ELEMENTS_LIMIT})
1378
+ Размер: ~${Math.round(dataSize / 1024)}KB (лимит: ${Math.round(SIZE_LIMIT / 1024)}KB)
1508
1379
 
1509
- Первые 5 элементов (для предпросмотра):
1510
- ${JSON.stringify(previewElements, null, 2)}
1380
+ 📋 ИНСТРУКЦИЯ ДЛЯ РАБОТЫ С БОЛЬШОЙ СХЕМОЙ:
1511
1381
 
1512
- Для получения полных данных используй:
1513
- export_schema_to_json с format="compact" — выгрузит JSON
1514
- • export_schema_to_json с format="elements_only" — только элементы`;
1382
+ 1. Экспортируй в файл:
1383
+ export_schema_to_json(schema_id="${schema.id}", file_path="/tmp/schema.json")
1515
1384
 
1516
- connectionsText = `[${connectionsCount} связей используй export_schema_to_json для полного списка]`;
1385
+ 2. Прочитай файл через Read tool:
1386
+ Read("/tmp/schema.json")
1517
1387
 
1518
- sizeWarning = `\n\n⚠️ ВНИМАНИЕ: Схема содержит ${elementsCount} элементов (~${Math.round(dataSize / 1024)}KB).
1519
- Полный вывод может переполнить контекст!
1520
- Для работы с большими схемами рекомендуется использовать export_schema_to_json.`;
1521
- } else {
1522
- elementsText = JSON.stringify(schema.data?.elements || [], null, 2);
1523
- connectionsText = JSON.stringify(schema.data?.connections || [], null, 2);
1524
- sizeWarning = "";
1388
+ 3. Отредактируй файл
1389
+
1390
+ 4. Загрузи обратно:
1391
+ replace_schema(schema_id="${schema.id}", file_path="/tmp/schema.json")
1392
+
1393
+ Это экономит токены и предотвращает переполнение контекста.`,
1394
+ }],
1395
+ };
1525
1396
  }
1526
1397
 
1398
+ // Маленькая схема — выводим полностью
1527
1399
  return {
1528
1400
  content: [{
1529
1401
  type: "text",
@@ -1535,13 +1407,13 @@ ID: ${schema.id}
1535
1407
  Элементов: ${elementsCount}
1536
1408
  Связей: ${connectionsCount}
1537
1409
  Размер данных: ~${Math.round(dataSize / 1024)}KB
1538
- URL: ${API_BASE_URL}/canvas?schema=${schema.id}${sizeWarning}
1410
+ URL: ${API_BASE_URL}/canvas?schema=${schema.id}
1539
1411
 
1540
1412
  Элементы:
1541
- ${elementsText}
1413
+ ${JSON.stringify(schema.data?.elements || [], null, 2)}
1542
1414
 
1543
1415
  Связи:
1544
- ${connectionsText}`,
1416
+ ${JSON.stringify(schema.data?.connections || [], null, 2)}`,
1545
1417
  }],
1546
1418
  };
1547
1419
  }
@@ -1574,32 +1446,51 @@ ${connectionsText}`,
1574
1446
 
1575
1447
  const schema = result.schema;
1576
1448
 
1577
- // Проверяем размер данных для предупреждения о больших схемах
1449
+ // Проверяем размер данных
1578
1450
  const elementsCount = schema.data?.elements?.length || 0;
1579
1451
  const connectionsCount = schema.data?.connections?.length || 0;
1580
1452
  const dataSize = JSON.stringify(schema.data || {}).length;
1581
- const isLargeSchema = dataSize > 50000 || elementsCount > 100;
1582
-
1583
- // Формируем вывод в зависимости от размера
1584
- let elementsText, connectionsText;
1585
1453
 
1586
- if (isLargeSchema) {
1587
- // Большая схема — выводим только краткую статистику
1588
- elementsText = `[Схема слишком большая для полного вывода: ${elementsCount} элементов, ~${Math.round(dataSize / 1024)}KB]
1589
-
1590
- Для работы с большой схемой используй:
1591
- • export_schema_to_json с format="compact" для получения данных в файл
1592
- • Редактируй отдельные элементы через replace_schema`;
1593
- connectionsText = `[${connectionsCount} связей]`;
1594
- } else {
1595
- elementsText = JSON.stringify(schema.data?.elements || [], null, 2);
1596
- connectionsText = JSON.stringify(schema.data?.connections || [], null, 2);
1597
- }
1454
+ // Лимит: 50 элементов или 30KB
1455
+ const ELEMENTS_LIMIT = 50;
1456
+ const SIZE_LIMIT = 30000;
1457
+ const isLargeSchema = elementsCount > ELEMENTS_LIMIT || dataSize > SIZE_LIMIT;
1598
1458
 
1599
1459
  const accessNote = isSharedLink
1600
1460
  ? "\n⚠️ Это публичная ссылка. Для редактирования нужен доступ к оригинальной схеме."
1601
1461
  : "";
1602
1462
 
1463
+ if (isLargeSchema) {
1464
+ // Большая схема — НЕ выводим данные, только инструкцию
1465
+ return {
1466
+ content: [{
1467
+ type: "text",
1468
+ text: `⛔ СХЕМА СЛИШКОМ БОЛЬШАЯ ДЛЯ ПРЯМОГО ЧТЕНИЯ
1469
+
1470
+ Схема "${schema.name}"
1471
+ ID: ${schema.id}
1472
+ Элементов: ${elementsCount} (лимит: ${ELEMENTS_LIMIT})
1473
+ Размер: ~${Math.round(dataSize / 1024)}KB (лимит: ${Math.round(SIZE_LIMIT / 1024)}KB)${accessNote}
1474
+
1475
+ 📋 ИНСТРУКЦИЯ ДЛЯ РАБОТЫ С БОЛЬШОЙ СХЕМОЙ:
1476
+
1477
+ 1. Экспортируй в файл:
1478
+ export_schema_to_json(schema_id="${schema.id}", file_path="/tmp/schema.json")
1479
+
1480
+ 2. Прочитай файл через Read tool:
1481
+ Read("/tmp/schema.json")
1482
+
1483
+ 3. Отредактируй файл
1484
+
1485
+ 4. Загрузи обратно:
1486
+ replace_schema(schema_id="${schema.id}", file_path="/tmp/schema.json")
1487
+
1488
+ Это экономит токены и предотвращает переполнение контекста.`,
1489
+ }],
1490
+ };
1491
+ }
1492
+
1493
+ // Маленькая схема — выводим полностью
1603
1494
  return {
1604
1495
  content: [{
1605
1496
  type: "text",
@@ -1616,10 +1507,10 @@ ID: ${schema.id}
1616
1507
  URL: ${API_BASE_URL}/canvas?schema=${schema.id}${accessNote}
1617
1508
 
1618
1509
  Элементы:
1619
- ${elementsText}
1510
+ ${JSON.stringify(schema.data?.elements || [], null, 2)}
1620
1511
 
1621
1512
  Связи:
1622
- ${connectionsText}
1513
+ ${JSON.stringify(schema.data?.connections || [], null, 2)}
1623
1514
 
1624
1515
  Теперь ты можешь:
1625
1516
  • Редактировать схему с помощью replace_schema (schema_id: "${schema.id}")
@@ -2469,171 +2360,6 @@ URL: ${API_BASE_URL}/canvas?schema=${result.schema.id}${warningsText}`,
2469
2360
  };
2470
2361
  }
2471
2362
 
2472
- // ========== ВЕРСИИ ==========
2473
- case "list_versions": {
2474
- const { schema_id, limit = 50, offset = 0 } = args;
2475
-
2476
- const result = await apiRequest(`/schemas/${schema_id}/versions?limit=${Math.min(limit, 100)}&offset=${offset}`);
2477
-
2478
- if (!result.versions || result.versions.length === 0) {
2479
- return {
2480
- content: [{
2481
- type: "text",
2482
- text: `История схемы пуста.
2483
-
2484
- Версии создаются автоматически при каждом сохранении схемы.
2485
- Также можно создать ручную версию (checkpoint) с помощью create_version.`,
2486
- }],
2487
- };
2488
- }
2489
-
2490
- const versionsList = result.versions.map(v => {
2491
- const date = new Date(v.createdAt);
2492
- const dateStr = date.toLocaleDateString('ru-RU');
2493
- const timeStr = date.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' });
2494
- const typeLabel = v.isManual ? '📌 Ручная' : '⏱️ Авто';
2495
- const commentText = v.comment ? ` — "${v.comment}"` : '';
2496
- return `#${v.versionNumber} | ${dateStr} ${timeStr} | ${typeLabel} | ${v.elementsCount} элем.${commentText}\n ID: ${v.id}`;
2497
- });
2498
-
2499
- return {
2500
- content: [{
2501
- type: "text",
2502
- text: `📜 История схемы (${result.versions.length} из ${result.total} версий)
2503
-
2504
- ${versionsList.join('\n\n')}
2505
-
2506
- ${result.hasMore ? `\n⏩ Есть ещё версии. Используй offset=${offset + result.versions.length} для продолжения.` : ''}
2507
-
2508
- Команды:
2509
- • get_version — посмотреть содержимое версии
2510
- • restore_version — восстановить схему из версии
2511
- • create_version — создать ручную версию (checkpoint)`,
2512
- }],
2513
- };
2514
- }
2515
-
2516
- case "get_version": {
2517
- const { schema_id, version_id } = args;
2518
-
2519
- const result = await apiRequest(`/schemas/${schema_id}/versions/${version_id}`);
2520
- const version = result.version;
2521
-
2522
- // Парсим данные версии
2523
- let versionData = {};
2524
- try {
2525
- versionData = JSON.parse(version.data);
2526
- } catch (e) {
2527
- versionData = { elements: [], connections: [] };
2528
- }
2529
-
2530
- const elementsCount = versionData.elements?.length || 0;
2531
- const connectionsCount = versionData.connections?.length || 0;
2532
- const dataSize = version.data?.length || 0;
2533
- const isLargeVersion = dataSize > 50000 || elementsCount > 100;
2534
-
2535
- const date = new Date(version.createdAt);
2536
- const dateStr = date.toLocaleDateString('ru-RU');
2537
- const timeStr = date.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' });
2538
- const typeLabel = version.isManual ? '📌 Ручная версия' : '⏱️ Автосохранение';
2539
-
2540
- let elementsText;
2541
- if (isLargeVersion) {
2542
- const previewElements = (versionData.elements || []).slice(0, 5);
2543
- elementsText = `⚠️ Большая версия: ${elementsCount} элементов, ~${Math.round(dataSize / 1024)}KB
2544
-
2545
- Первые 5 элементов:
2546
- ${JSON.stringify(previewElements, null, 2)}`;
2547
- } else {
2548
- elementsText = JSON.stringify(versionData.elements || [], null, 2);
2549
- }
2550
-
2551
- return {
2552
- content: [{
2553
- type: "text",
2554
- text: `📋 Версия #${version.versionNumber}
2555
-
2556
- ID версии: ${version.id}
2557
- Тип: ${typeLabel}
2558
- Дата: ${dateStr} ${timeStr}
2559
- ${version.comment ? `Комментарий: "${version.comment}"` : ''}
2560
-
2561
- Статистика:
2562
- • Элементов: ${elementsCount}
2563
- • Связей: ${connectionsCount}
2564
- • Размер: ~${Math.round(dataSize / 1024)}KB
2565
-
2566
- Элементы:
2567
- ${elementsText}
2568
-
2569
- Команды:
2570
- • restore_version — восстановить схему из этой версии
2571
- • list_versions — вернуться к списку версий`,
2572
- }],
2573
- };
2574
- }
2575
-
2576
- case "restore_version": {
2577
- const { schema_id, version_id } = args;
2578
-
2579
- const result = await apiRequest(`/schemas/${schema_id}/versions/${version_id}/restore`, {
2580
- method: "POST",
2581
- });
2582
-
2583
- const restored = result.restoredVersion;
2584
- const date = new Date(restored.createdAt);
2585
- const dateStr = date.toLocaleDateString('ru-RU');
2586
- const timeStr = date.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' });
2587
-
2588
- return {
2589
- content: [{
2590
- type: "text",
2591
- text: `✅ Схема восстановлена!
2592
-
2593
- Восстановлено из версии #${restored.versionNumber}
2594
- Дата версии: ${dateStr} ${timeStr}
2595
-
2596
- ⚠️ Перед восстановлением была автоматически создана резервная копия текущего состояния.
2597
-
2598
- URL: ${API_BASE_URL}/canvas?schema=${schema_id}
2599
-
2600
- Совет: используй list_versions чтобы увидеть обновлённую историю.`,
2601
- }],
2602
- };
2603
- }
2604
-
2605
- case "create_version": {
2606
- const { schema_id, comment } = args;
2607
-
2608
- const result = await apiRequest(`/schemas/${schema_id}/versions`, {
2609
- method: "POST",
2610
- body: JSON.stringify({
2611
- isManual: true,
2612
- comment: comment || null,
2613
- }),
2614
- });
2615
-
2616
- const version = result.version;
2617
- const date = new Date(version.createdAt);
2618
- const dateStr = date.toLocaleDateString('ru-RU');
2619
- const timeStr = date.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' });
2620
-
2621
- return {
2622
- content: [{
2623
- type: "text",
2624
- text: `✅ Ручная версия создана!
2625
-
2626
- Версия: #${version.versionNumber}
2627
- Дата: ${dateStr} ${timeStr}
2628
- ${version.comment ? `Комментарий: "${version.comment}"` : ''}
2629
-
2630
- 📌 Ручные версии не удаляются при очистке старых автосохранений.
2631
-
2632
- Используй restore_version чтобы восстановить схему из этой версии в будущем.`,
2633
- }],
2634
- };
2635
- }
2636
-
2637
2363
  default:
2638
2364
  throw new Error(`Неизвестная команда: ${name}`);
2639
2365
  }
@@ -2672,7 +2398,7 @@ async function main() {
2672
2398
  const server = new Server(
2673
2399
  {
2674
2400
  name: "schemeog-mcp",
2675
- version: "3.0.0",
2401
+ version: "2.9.3",
2676
2402
  },
2677
2403
  {
2678
2404
  capabilities: {
@@ -2702,7 +2428,7 @@ async function main() {
2702
2428
  const transport = new StdioServerTransport();
2703
2429
  await server.connect(transport);
2704
2430
 
2705
- console.error("SchemeOG MCP Server v3.0.0 запущен");
2431
+ console.error("SchemeOG MCP Server v2.9.3 запущен");
2706
2432
  }
2707
2433
 
2708
2434
  main().catch(console.error);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "schemeog-mcp",
3
- "version": "3.6.2",
3
+ "version": "3.7.0",
4
4
  "description": "MCP Server for Diagrams.love - Create and manage visual diagrams and flowcharts with AI assistance",
5
5
  "type": "module",
6
6
  "main": "index.js",