@pascal-app/mcp 1.0.3 → 1.0.5
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 +76 -0
- package/README.md +181 -56
- package/dist/bin/pascal-mcp.js +9 -3
- package/dist/bridge/agent-session.d.ts +18 -0
- package/dist/bridge/agent-session.d.ts.map +1 -0
- package/dist/bridge/agent-session.js +15 -0
- package/dist/bridge/index.d.ts +1 -1
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/scene-bridge.d.ts +42 -6
- package/dist/bridge/scene-bridge.d.ts.map +1 -1
- package/dist/bridge/scene-bridge.js +232 -45
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/lib/safe-fetch.d.ts +22 -4
- package/dist/lib/safe-fetch.d.ts.map +1 -1
- package/dist/lib/safe-fetch.js +233 -134
- package/dist/operations/scene-operations.d.ts +41 -3
- package/dist/operations/scene-operations.d.ts.map +1 -1
- package/dist/operations/scene-operations.js +42 -1
- package/dist/prompts/from-brief.d.ts +1 -1
- package/dist/prompts/from-brief.d.ts.map +1 -1
- package/dist/prompts/from-brief.js +3 -3
- package/dist/prompts/index.d.ts +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/iterate-on-feedback.d.ts +1 -1
- package/dist/prompts/iterate-on-feedback.d.ts.map +1 -1
- package/dist/prompts/iterate-on-feedback.js +3 -3
- package/dist/prompts/renovation-from-photos.d.ts +1 -1
- package/dist/prompts/renovation-from-photos.d.ts.map +1 -1
- package/dist/prompts/renovation-from-photos.js +2 -2
- package/dist/prompts/scene-guidance.d.ts.map +1 -1
- package/dist/prompts/scene-guidance.js +13 -6
- package/dist/resources/agent-guide.d.ts +1 -1
- package/dist/resources/agent-guide.d.ts.map +1 -1
- package/dist/resources/agent-guide.js +62 -33
- package/dist/resources/catalog-items.d.ts +5 -6
- package/dist/resources/catalog-items.d.ts.map +1 -1
- package/dist/resources/catalog-items.js +7 -9
- package/dist/resources/constraints.d.ts +1 -1
- package/dist/resources/constraints.d.ts.map +1 -1
- package/dist/resources/constraints.js +1 -1
- package/dist/resources/design-schema.d.ts +9 -0
- package/dist/resources/design-schema.d.ts.map +1 -0
- package/dist/resources/design-schema.js +21 -0
- package/dist/resources/index.d.ts +4 -2
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +5 -2
- package/dist/resources/scene-current.d.ts +1 -1
- package/dist/resources/scene-current.d.ts.map +1 -1
- package/dist/resources/scene-summary.d.ts +1 -1
- package/dist/resources/scene-summary.d.ts.map +1 -1
- package/dist/server.d.ts +25 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +71 -25
- package/dist/storage/disk-artifact-store.d.ts +9 -0
- package/dist/storage/disk-artifact-store.d.ts.map +1 -0
- package/dist/storage/disk-artifact-store.js +46 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/sqlite-scene-store.d.ts +3 -3
- package/dist/storage/sqlite-scene-store.d.ts.map +1 -1
- package/dist/storage/sqlite-scene-store.js +4 -3
- package/dist/storage/types.d.ts +36 -7
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +12 -0
- package/dist/templates/empty-studio.d.ts +3 -3
- package/dist/templates/empty-studio.d.ts.map +1 -1
- package/dist/templates/garden-house.d.ts +3 -3
- package/dist/templates/garden-house.d.ts.map +1 -1
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/two-bedroom.d.ts +3 -3
- package/dist/templates/two-bedroom.d.ts.map +1 -1
- package/dist/tools/add-column.d.ts +5 -0
- package/dist/tools/add-column.d.ts.map +1 -0
- package/dist/tools/add-column.js +59 -0
- package/dist/tools/add-object.d.ts +76 -0
- package/dist/tools/add-object.d.ts.map +1 -0
- package/dist/tools/add-object.js +187 -0
- package/dist/tools/annotations.d.ts.map +1 -1
- package/dist/tools/apply-patch.d.ts +9 -2
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +36 -5
- package/dist/tools/asset-catalog.d.ts +9 -5
- package/dist/tools/asset-catalog.d.ts.map +1 -1
- package/dist/tools/asset-catalog.js +33 -12
- package/dist/tools/author-scene.d.ts +10 -0
- package/dist/tools/author-scene.d.ts.map +1 -0
- package/dist/tools/author-scene.js +140 -0
- package/dist/tools/check-collisions.d.ts +7 -7
- package/dist/tools/check-collisions.d.ts.map +1 -1
- package/dist/tools/check-collisions.js +7 -8
- package/dist/tools/clear-scene.d.ts +9 -0
- package/dist/tools/clear-scene.d.ts.map +1 -0
- package/dist/tools/clear-scene.js +59 -0
- package/dist/tools/collections.d.ts +4 -0
- package/dist/tools/collections.d.ts.map +1 -0
- package/dist/tools/collections.js +53 -0
- package/dist/tools/construction-tools.d.ts +12 -88
- package/dist/tools/construction-tools.d.ts.map +1 -1
- package/dist/tools/construction-tools.js +122 -381
- package/dist/tools/create-unit.d.ts +5 -3
- package/dist/tools/create-unit.d.ts.map +1 -1
- package/dist/tools/create-unit.js +2 -2
- package/dist/tools/errors.d.ts +15 -4
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +14 -4
- package/dist/tools/export-glb.d.ts +1 -1
- package/dist/tools/export-glb.d.ts.map +1 -1
- package/dist/tools/export-glb.js +2 -2
- package/dist/tools/export-json.d.ts +1 -1
- package/dist/tools/export-json.d.ts.map +1 -1
- package/dist/tools/export-json.js +2 -2
- package/dist/tools/geometry-script-worker.d.ts +2 -0
- package/dist/tools/geometry-script-worker.d.ts.map +1 -0
- package/dist/tools/geometry-script-worker.js +21 -0
- package/dist/tools/get-scene.d.ts +2 -1
- package/dist/tools/get-scene.d.ts.map +1 -1
- package/dist/tools/get-scene.js +5 -3
- package/dist/tools/honest-patch-guard.d.ts +2 -0
- package/dist/tools/honest-patch-guard.d.ts.map +1 -0
- package/dist/tools/honest-patch-guard.js +32 -0
- package/dist/tools/hosted-services.d.ts +4 -0
- package/dist/tools/hosted-services.d.ts.map +1 -0
- package/dist/tools/hosted-services.js +40 -0
- package/dist/tools/index.d.ts +12 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +18 -32
- package/dist/tools/level-height-guard.d.ts +2 -0
- package/dist/tools/level-height-guard.d.ts.map +1 -0
- package/dist/tools/level-height-guard.js +11 -0
- package/dist/tools/list-units.d.ts +2 -2
- package/dist/tools/list-units.d.ts.map +1 -1
- package/dist/tools/list-units.js +2 -2
- package/dist/tools/live-sync.d.ts +25 -6
- package/dist/tools/live-sync.d.ts.map +1 -1
- package/dist/tools/live-sync.js +48 -27
- package/dist/tools/local-geometry-scripts.d.ts +8 -0
- package/dist/tools/local-geometry-scripts.d.ts.map +1 -0
- package/dist/tools/local-geometry-scripts.js +67 -0
- package/dist/tools/measure.d.ts +7 -1
- package/dist/tools/measure.d.ts.map +1 -1
- package/dist/tools/measure.js +38 -70
- package/dist/tools/measurement.d.ts +1 -36
- package/dist/tools/measurement.d.ts.map +1 -1
- package/dist/tools/measurement.js +2 -94
- package/dist/tools/node-world-point.d.ts +37 -0
- package/dist/tools/node-world-point.d.ts.map +1 -0
- package/dist/tools/node-world-point.js +457 -0
- package/dist/tools/normalize-schema-dialect.d.ts +1 -1
- package/dist/tools/normalize-schema-dialect.d.ts.map +1 -1
- package/dist/tools/normalize-schema-dialect.js +22 -3
- package/dist/tools/patch-guards.d.ts +60 -0
- package/dist/tools/patch-guards.d.ts.map +1 -0
- package/dist/tools/patch-guards.js +256 -0
- package/dist/tools/photo-to-scene/index.d.ts +1 -1
- package/dist/tools/photo-to-scene/index.d.ts.map +1 -1
- package/dist/tools/photo-to-scene/photo-to-scene.d.ts +3 -3
- package/dist/tools/photo-to-scene/photo-to-scene.d.ts.map +1 -1
- package/dist/tools/photo-to-scene/photo-to-scene.js +10 -9
- package/dist/tools/project-files.d.ts +4 -0
- package/dist/tools/project-files.d.ts.map +1 -0
- package/dist/tools/project-files.js +30 -0
- package/dist/tools/redo.d.ts +4 -2
- package/dist/tools/redo.d.ts.map +1 -1
- package/dist/tools/redo.js +4 -4
- package/dist/tools/retired-tools.d.ts +10 -0
- package/dist/tools/retired-tools.d.ts.map +1 -0
- package/dist/tools/retired-tools.js +22 -0
- package/dist/tools/roof-level-guard.d.ts +2 -0
- package/dist/tools/roof-level-guard.d.ts.map +1 -0
- package/dist/tools/roof-level-guard.js +22 -0
- package/dist/tools/room-tools.d.ts +36 -98
- package/dist/tools/room-tools.d.ts.map +1 -1
- package/dist/tools/room-tools.js +130 -565
- package/dist/tools/scene-lifecycle/create-project.d.ts +1 -1
- package/dist/tools/scene-lifecycle/create-project.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/create-project.js +31 -6
- package/dist/tools/scene-lifecycle/delete-scene.d.ts +3 -1
- package/dist/tools/scene-lifecycle/delete-scene.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/delete-scene.js +10 -9
- package/dist/tools/scene-lifecycle/get-project-status.d.ts +1 -1
- package/dist/tools/scene-lifecycle/get-project-status.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/get-project-status.js +6 -6
- package/dist/tools/scene-lifecycle/index.d.ts +1 -1
- package/dist/tools/scene-lifecycle/index.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/list-scenes.d.ts +1 -1
- package/dist/tools/scene-lifecycle/list-scenes.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/list-scenes.js +4 -4
- package/dist/tools/scene-lifecycle/load-scene.d.ts +2 -2
- package/dist/tools/scene-lifecycle/load-scene.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/load-scene.js +5 -5
- package/dist/tools/scene-lifecycle/metadata.d.ts +1 -1
- package/dist/tools/scene-lifecycle/rename-scene.d.ts +1 -1
- package/dist/tools/scene-lifecycle/rename-scene.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/rename-scene.js +6 -6
- package/dist/tools/scene-lifecycle/save-scene.d.ts +6 -3
- package/dist/tools/scene-lifecycle/save-scene.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/save-scene.js +124 -16
- package/dist/tools/scene-lifecycle/test-utils.d.ts +3 -3
- package/dist/tools/scene-lifecycle/test-utils.d.ts.map +1 -1
- package/dist/tools/scene-lifecycle/test-utils.js +2 -1
- package/dist/tools/set-unit-members.d.ts +4 -2
- package/dist/tools/set-unit-members.d.ts.map +1 -1
- package/dist/tools/set-unit-members.js +6 -6
- package/dist/tools/set-zone.d.ts +4 -2
- package/dist/tools/set-zone.d.ts.map +1 -1
- package/dist/tools/set-zone.js +30 -18
- package/dist/tools/shared-tools.d.ts +40 -0
- package/dist/tools/shared-tools.d.ts.map +1 -0
- package/dist/tools/shared-tools.js +574 -0
- package/dist/tools/structure-tools.d.ts +57 -0
- package/dist/tools/structure-tools.d.ts.map +1 -0
- package/dist/tools/structure-tools.js +57 -0
- package/dist/tools/templates/create-from-template.d.ts +2 -2
- package/dist/tools/templates/create-from-template.d.ts.map +1 -1
- package/dist/tools/templates/create-from-template.js +6 -6
- package/dist/tools/templates/create-house-from-brief.d.ts +1 -1
- package/dist/tools/templates/create-house-from-brief.d.ts.map +1 -1
- package/dist/tools/templates/create-house-from-brief.js +6 -6
- package/dist/tools/templates/index.d.ts +1 -1
- package/dist/tools/templates/index.d.ts.map +1 -1
- package/dist/tools/templates/list-templates.d.ts +1 -1
- package/dist/tools/templates/list-templates.d.ts.map +1 -1
- package/dist/tools/templates/list-templates.js +2 -2
- package/dist/tools/undo.d.ts +4 -2
- package/dist/tools/undo.d.ts.map +1 -1
- package/dist/tools/undo.js +4 -4
- package/dist/tools/unit-members.d.ts.map +1 -1
- package/dist/tools/unit-members.js +6 -6
- package/dist/tools/variants/generate-variants.d.ts +6 -6
- package/dist/tools/variants/generate-variants.d.ts.map +1 -1
- package/dist/tools/variants/generate-variants.js +6 -6
- package/dist/tools/variants/index.d.ts +1 -1
- package/dist/tools/variants/index.d.ts.map +1 -1
- package/dist/tools/variants/mutations.js +1 -1
- package/dist/tools/view-scene.d.ts +44 -0
- package/dist/tools/view-scene.d.ts.map +1 -0
- package/dist/tools/view-scene.js +75 -0
- package/dist/tools/vision/analyze-floorplan-image.d.ts +1 -1
- package/dist/tools/vision/analyze-floorplan-image.d.ts.map +1 -1
- package/dist/tools/vision/analyze-floorplan-image.js +7 -7
- package/dist/tools/vision/analyze-room-photo.d.ts +1 -1
- package/dist/tools/vision/analyze-room-photo.d.ts.map +1 -1
- package/dist/tools/vision/analyze-room-photo.js +7 -7
- package/dist/tools/vision/index.d.ts +1 -1
- package/dist/tools/vision/index.d.ts.map +1 -1
- package/dist/transports/http.d.ts +8 -2
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +9 -3
- package/dist/transports/stdio.d.ts +15 -9
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +18 -11
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +17 -3
- package/examples/coordinate-conventions-demo.md +12 -13
- package/examples/embed-in-agent.ts +6 -7
- package/examples/generate-apartment.md +13 -15
- package/examples/photo-to-scene.md +3 -4
- package/examples/renovate-from-photos.md +6 -9
- package/package.json +19 -9
- package/dist/tools/create-level.d.ts +0 -21
- package/dist/tools/create-level.d.ts.map +0 -1
- package/dist/tools/create-level.js +0 -63
- package/dist/tools/create-wall.d.ts +0 -22
- package/dist/tools/create-wall.d.ts.map +0 -1
- package/dist/tools/create-wall.js +0 -57
- package/dist/tools/cut-opening.d.ts +0 -25
- package/dist/tools/cut-opening.d.ts.map +0 -1
- package/dist/tools/cut-opening.js +0 -61
- package/dist/tools/delete-node.d.ts +0 -19
- package/dist/tools/delete-node.d.ts.map +0 -1
- package/dist/tools/delete-node.js +0 -40
- package/dist/tools/describe-node.d.ts +0 -17
- package/dist/tools/describe-node.d.ts.map +0 -1
- package/dist/tools/describe-node.js +0 -97
- package/dist/tools/door-clearance.d.ts +0 -135
- package/dist/tools/door-clearance.d.ts.map +0 -1
- package/dist/tools/door-clearance.js +0 -334
- package/dist/tools/duplicate-level.d.ts +0 -19
- package/dist/tools/duplicate-level.d.ts.map +0 -1
- package/dist/tools/duplicate-level.js +0 -60
- package/dist/tools/find-nodes.d.ts +0 -32
- package/dist/tools/find-nodes.d.ts.map +0 -1
- package/dist/tools/find-nodes.js +0 -107
- package/dist/tools/geometry.d.ts +0 -24
- package/dist/tools/geometry.d.ts.map +0 -1
- package/dist/tools/geometry.js +0 -94
- package/dist/tools/get-node.d.ts +0 -11
- package/dist/tools/get-node.d.ts.map +0 -1
- package/dist/tools/get-node.js +0 -29
- package/dist/tools/layout-clearance.d.ts +0 -105
- package/dist/tools/layout-clearance.d.ts.map +0 -1
- package/dist/tools/layout-clearance.js +0 -190
- package/dist/tools/place-item.d.ts +0 -22
- package/dist/tools/place-item.d.ts.map +0 -1
- package/dist/tools/place-item.js +0 -89
- package/dist/tools/scene-query.d.ts +0 -62
- package/dist/tools/scene-query.d.ts.map +0 -1
- package/dist/tools/scene-query.js +0 -670
- package/dist/tools/validate-scene.d.ts +0 -19
- package/dist/tools/validate-scene.d.ts.map +0 -1
- package/dist/tools/validate-scene.js +0 -28
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { SceneOperations } from '../../operations/index.js';
|
|
4
4
|
export declare const createProjectInput: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/create-project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/create-project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKvD,eAAO,MAAM,kBAAkB;IAC7B,IAAI;IACJ,EAAE;IACF,SAAS;CACV,CAAA;AAED,eAAO,MAAM,mBAAmB;IAC9B,EAAE;IACF,SAAS;IACT,IAAI;IACJ,SAAS;IACT,GAAG;IACH,OAAO;IACP,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,qBAAqB;IACrB,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,cAAc;IACd,QAAQ;CACT,CAAA;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA4E1F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { ADDITIVE_TOOL_ANNOTATIONS } from '../annotations.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ProtocolErrorCode, throwMcpError } from '../errors.js';
|
|
4
4
|
import { currentLevelContext, projectStatusPayload } from './metadata.js';
|
|
5
5
|
export const createProjectInput = {
|
|
6
6
|
name: z.string().min(1).max(200),
|
|
@@ -34,14 +34,15 @@ export function registerCreateProject(server, operations) {
|
|
|
34
34
|
server.registerTool('create_project', {
|
|
35
35
|
title: 'Create project',
|
|
36
36
|
description: 'Create a browser-visible Pascal project for the authenticated user. Use this before save_scene when the user asks for a new project.',
|
|
37
|
-
inputSchema: createProjectInput,
|
|
38
|
-
outputSchema: createProjectOutput,
|
|
37
|
+
inputSchema: z.object(createProjectInput),
|
|
38
|
+
outputSchema: z.object(createProjectOutput),
|
|
39
39
|
annotations: ADDITIVE_TOOL_ANNOTATIONS,
|
|
40
40
|
}, async ({ name, id, isPrivate }) => {
|
|
41
41
|
if (!operations.canCreateProject) {
|
|
42
|
-
throwMcpError(
|
|
42
|
+
throwMcpError(ProtocolErrorCode.InvalidRequest, 'create_project_unavailable: this MCP store cannot create hosted projects');
|
|
43
43
|
}
|
|
44
44
|
try {
|
|
45
|
+
const bound = operations.getActiveScene();
|
|
45
46
|
const status = await operations.createProject({
|
|
46
47
|
name,
|
|
47
48
|
...(id !== undefined ? { id } : {}),
|
|
@@ -55,8 +56,32 @@ export function registerCreateProject(server, operations) {
|
|
|
55
56
|
thumbnailUrl: status.thumbnailUrl,
|
|
56
57
|
version: status.version,
|
|
57
58
|
});
|
|
59
|
+
// A session bound to another project starts the new one empty: carried over, that
|
|
60
|
+
// project's scene was saved into the new one. Work bound to no project, a saved scene of
|
|
61
|
+
// none included, is kept: it is what the new project is for. Emptied once bound to the new
|
|
62
|
+
// project, so nothing that follows the scene can write the empty scene to the old one.
|
|
63
|
+
if (bound?.projectId && bound.projectId !== status.projectId) {
|
|
64
|
+
operations.loadJSON({ nodes: {}, rootNodeIds: [] });
|
|
65
|
+
operations.loadDefault();
|
|
66
|
+
operations.clearHistory();
|
|
67
|
+
}
|
|
68
|
+
// A scene from the first call: its first draft is what this session holds (the empty
|
|
69
|
+
// scene, or the unbound work it was made for), so any session can load it at once. Unsaved,
|
|
70
|
+
// another session's load_scene answered scene_not_found until a first save.
|
|
71
|
+
operations.setActiveScene(await operations.saveScene({
|
|
72
|
+
id: status.id,
|
|
73
|
+
name: status.name,
|
|
74
|
+
projectId: status.projectId,
|
|
75
|
+
ownerId: status.ownerId,
|
|
76
|
+
thumbnailUrl: status.thumbnailUrl,
|
|
77
|
+
graph: operations.exportSceneGraph(),
|
|
78
|
+
saveMode: 'draft',
|
|
79
|
+
publish: false,
|
|
80
|
+
operation: 'create_project',
|
|
81
|
+
}));
|
|
82
|
+
const saved = (await operations.getProjectStatus(status.id)) ?? status;
|
|
58
83
|
const payload = {
|
|
59
|
-
...projectStatusPayload(
|
|
84
|
+
...projectStatusPayload(saved, 'The project is now bound to this MCP session. Open editorUrl now; semantic tools will update the browser-visible draft. Call save_scene with saveMode: "checkpoint" only when you want a meaningful version.'),
|
|
60
85
|
...currentLevelContext(operations),
|
|
61
86
|
};
|
|
62
87
|
return {
|
|
@@ -66,7 +91,7 @@ export function registerCreateProject(server, operations) {
|
|
|
66
91
|
}
|
|
67
92
|
catch (err) {
|
|
68
93
|
const msg = err instanceof Error ? err.message : String(err);
|
|
69
|
-
throwMcpError(
|
|
94
|
+
throwMcpError(ProtocolErrorCode.InvalidRequest, msg);
|
|
70
95
|
}
|
|
71
96
|
});
|
|
72
97
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { SceneOperations } from '../../operations/index.js';
|
|
4
4
|
export declare const deleteSceneInput: {
|
|
@@ -7,6 +7,8 @@ export declare const deleteSceneInput: {
|
|
|
7
7
|
};
|
|
8
8
|
export declare const deleteSceneOutput: {
|
|
9
9
|
deleted: z.ZodBoolean;
|
|
10
|
+
hidden: z.ZodBoolean;
|
|
11
|
+
message: z.ZodOptional<z.ZodString>;
|
|
10
12
|
};
|
|
11
13
|
export declare function registerDeleteScene(server: McpServer, operations: SceneOperations): void;
|
|
12
14
|
//# sourceMappingURL=delete-scene.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/delete-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"delete-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/delete-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKvD,eAAO,MAAM,gBAAgB;IAC3B,EAAE;IACF,eAAe;CAChB,CAAA;AAED,eAAO,MAAM,iBAAiB;IAC5B,OAAO;IACP,MAAM;IACN,OAAO;CACR,CAAA;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAmCxF"}
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { SceneNotFoundError, SceneVersionConflictError } from '../../storage/types.js';
|
|
3
3
|
import { DESTRUCTIVE_TOOL_ANNOTATIONS } from '../annotations.js';
|
|
4
|
-
import {
|
|
4
|
+
import { ProtocolErrorCode, throwMcpError } from '../errors.js';
|
|
5
5
|
export const deleteSceneInput = {
|
|
6
6
|
id: z.string().min(1).max(64),
|
|
7
7
|
expectedVersion: z.number().int().positive().optional(),
|
|
8
8
|
};
|
|
9
9
|
export const deleteSceneOutput = {
|
|
10
10
|
deleted: z.boolean(),
|
|
11
|
+
hidden: z.boolean(),
|
|
12
|
+
message: z.string().optional(),
|
|
11
13
|
};
|
|
12
14
|
export function registerDeleteScene(server, operations) {
|
|
13
15
|
server.registerTool('delete_scene', {
|
|
14
16
|
title: 'Delete scene',
|
|
15
|
-
description:
|
|
16
|
-
inputSchema: deleteSceneInput,
|
|
17
|
-
outputSchema: deleteSceneOutput,
|
|
17
|
+
description: "Remove a stored scene by id. In Pascal this never deletes the project: it hides it from Pascal's public listings until it is next saved with content, and answers `deleted: false, hidden: true` with a message; its owner can delete it from the projects page. Only someone who can manage the project may hide it. A local scene store deletes the scene. Optionally pass `expectedVersion` for optimistic concurrency.",
|
|
18
|
+
inputSchema: z.object(deleteSceneInput),
|
|
19
|
+
outputSchema: z.object(deleteSceneOutput),
|
|
18
20
|
annotations: DESTRUCTIVE_TOOL_ANNOTATIONS,
|
|
19
21
|
}, async ({ id, expectedVersion }) => {
|
|
20
22
|
try {
|
|
21
|
-
const
|
|
23
|
+
const payload = await operations.deleteStoredScene(id, {
|
|
22
24
|
...(expectedVersion !== undefined ? { expectedVersion } : {}),
|
|
23
25
|
});
|
|
24
|
-
const payload = { deleted };
|
|
25
26
|
return {
|
|
26
27
|
content: [{ type: 'text', text: JSON.stringify(payload) }],
|
|
27
28
|
structuredContent: payload,
|
|
@@ -29,16 +30,16 @@ export function registerDeleteScene(server, operations) {
|
|
|
29
30
|
}
|
|
30
31
|
catch (err) {
|
|
31
32
|
if (err instanceof SceneNotFoundError) {
|
|
32
|
-
throwMcpError(
|
|
33
|
+
throwMcpError(ProtocolErrorCode.InvalidParams, 'scene_not_found', { id });
|
|
33
34
|
}
|
|
34
35
|
if (err instanceof SceneVersionConflictError) {
|
|
35
|
-
throwMcpError(
|
|
36
|
+
throwMcpError(ProtocolErrorCode.InvalidRequest, 'version_conflict', {
|
|
36
37
|
id,
|
|
37
38
|
expectedVersion,
|
|
38
39
|
});
|
|
39
40
|
}
|
|
40
41
|
const msg = err instanceof Error ? err.message : String(err);
|
|
41
|
-
throwMcpError(
|
|
42
|
+
throwMcpError(ProtocolErrorCode.InternalError, msg);
|
|
42
43
|
}
|
|
43
44
|
});
|
|
44
45
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { SceneOperations } from '../../operations/index.js';
|
|
4
4
|
export declare const getProjectStatusInput: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-project-status.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/get-project-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"get-project-status.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/get-project-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKvD,eAAO,MAAM,qBAAqB;IAChC,EAAE;CACH,CAAA;AAED,eAAO,MAAM,sBAAsB;IACjC,EAAE;IACF,SAAS;IACT,IAAI;IACJ,SAAS;IACT,GAAG;IACH,OAAO;IACP,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,qBAAqB;IACrB,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,cAAc;IACd,QAAQ;CACT,CAAA;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA4C7F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { DESTRUCTIVE_TOOL_ANNOTATIONS } from '../annotations.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ProtocolError, ProtocolErrorCode, throwMcpError } from '../errors.js';
|
|
4
4
|
import { currentLevelContext, projectStatusPayload } from './metadata.js';
|
|
5
5
|
export const getProjectStatusInput = {
|
|
6
6
|
id: z.string().min(1).max(64),
|
|
@@ -32,14 +32,14 @@ export function registerGetProjectStatus(server, operations) {
|
|
|
32
32
|
server.registerTool('get_project_status', {
|
|
33
33
|
title: 'Get project status',
|
|
34
34
|
description: 'Authoritative status/debug call for a Pascal project: editor URL, browser-visible version, latest saved version, published version, node count, and graph hash.',
|
|
35
|
-
inputSchema: getProjectStatusInput,
|
|
36
|
-
outputSchema: getProjectStatusOutput,
|
|
35
|
+
inputSchema: z.object(getProjectStatusInput),
|
|
36
|
+
outputSchema: z.object(getProjectStatusOutput),
|
|
37
37
|
annotations: DESTRUCTIVE_TOOL_ANNOTATIONS,
|
|
38
38
|
}, async ({ id }) => {
|
|
39
39
|
try {
|
|
40
40
|
const status = await operations.getProjectStatus(id);
|
|
41
41
|
if (!status) {
|
|
42
|
-
throwMcpError(
|
|
42
|
+
throwMcpError(ProtocolErrorCode.InvalidParams, 'project_not_found', { id });
|
|
43
43
|
}
|
|
44
44
|
const activeScene = operations.getActiveScene();
|
|
45
45
|
if (activeScene?.id !== status.id) {
|
|
@@ -62,10 +62,10 @@ export function registerGetProjectStatus(server, operations) {
|
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
64
|
catch (err) {
|
|
65
|
-
if (err instanceof
|
|
65
|
+
if (err instanceof ProtocolError)
|
|
66
66
|
throw err;
|
|
67
67
|
const msg = err instanceof Error ? err.message : String(err);
|
|
68
|
-
throwMcpError(
|
|
68
|
+
throwMcpError(ProtocolErrorCode.InternalError, msg);
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
71
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import type { SceneOperations } from '../../operations/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Register the scene-lifecycle MCP tools (`save_scene`, `load_scene`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AASvD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAQhG;AAED,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACjG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACrF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { SceneOperations } from '../../operations/index.js';
|
|
4
4
|
export declare const listScenesInput: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-scenes.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/list-scenes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"list-scenes.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/list-scenes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAMvD,eAAO,MAAM,eAAe;IAC1B,SAAS;IACT,KAAK;CACN,CAAA;AAED,eAAO,MAAM,gBAAgB;IAC3B,MAAM;;;;;;;;;;;;;;;;CAkBP,CAAA;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA4BvF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { READ_ONLY_TOOL_ANNOTATIONS } from '../annotations.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ProtocolErrorCode, throwMcpError } from '../errors.js';
|
|
4
4
|
const DEFAULT_LIMIT = 100;
|
|
5
5
|
export const listScenesInput = {
|
|
6
6
|
projectId: z.string().optional(),
|
|
@@ -28,8 +28,8 @@ export function registerListScenes(server, operations) {
|
|
|
28
28
|
server.registerTool('list_scenes', {
|
|
29
29
|
title: 'List scenes',
|
|
30
30
|
description: 'List scenes in the SceneStore. Optionally filter by `projectId` and cap results with `limit` (default 100).',
|
|
31
|
-
inputSchema: listScenesInput,
|
|
32
|
-
outputSchema: listScenesOutput,
|
|
31
|
+
inputSchema: z.object(listScenesInput),
|
|
32
|
+
outputSchema: z.object(listScenesOutput),
|
|
33
33
|
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
34
34
|
}, async ({ projectId, limit }) => {
|
|
35
35
|
try {
|
|
@@ -45,7 +45,7 @@ export function registerListScenes(server, operations) {
|
|
|
45
45
|
}
|
|
46
46
|
catch (err) {
|
|
47
47
|
const msg = err instanceof Error ? err.message : String(err);
|
|
48
|
-
throwMcpError(
|
|
48
|
+
throwMcpError(ProtocolErrorCode.InternalError, msg);
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
51
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { SceneOperations } from '../../operations/index.js';
|
|
4
4
|
export declare const loadSceneInput: {
|
|
@@ -20,8 +20,8 @@ export declare const loadSceneOutput: {
|
|
|
20
20
|
published: z.ZodBoolean;
|
|
21
21
|
isDraft: z.ZodBoolean;
|
|
22
22
|
saveMode: z.ZodEnum<{
|
|
23
|
-
draft: "draft";
|
|
24
23
|
checkpoint: "checkpoint";
|
|
24
|
+
draft: "draft";
|
|
25
25
|
}>;
|
|
26
26
|
graphHash: z.ZodOptional<z.ZodString>;
|
|
27
27
|
levelIds: z.ZodArray<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/load-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"load-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/load-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKvD,eAAO,MAAM,cAAc;IACzB,EAAE;CACH,CAAA;AAED,eAAO,MAAM,eAAe;IAC1B,EAAE;IACF,IAAI;IACJ,SAAS;IACT,YAAY;IACZ,OAAO;IACP,SAAS;IACT,SAAS;IACT,OAAO;IACP,SAAS;IACT,SAAS;IACT,GAAG;IACH,SAAS;IACT,SAAS;IACT,OAAO;IACP,QAAQ;;;;IACR,SAAS;IACT,QAAQ;IACR,cAAc;CACf,CAAA;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAiClF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { DESTRUCTIVE_TOOL_ANNOTATIONS } from '../annotations.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ProtocolErrorCode, throwMcpError } from '../errors.js';
|
|
4
4
|
import { currentLevelContext, sceneMetaPayload } from './metadata.js';
|
|
5
5
|
export const loadSceneInput = {
|
|
6
6
|
id: z.string().min(1).max(64),
|
|
@@ -29,13 +29,13 @@ export function registerLoadScene(server, bridge) {
|
|
|
29
29
|
server.registerTool('load_scene', {
|
|
30
30
|
title: 'Load scene',
|
|
31
31
|
description: 'Load a scene from the SceneStore into the bridge. Returns the scene metadata. Throws `scene_not_found` if the id does not exist.',
|
|
32
|
-
inputSchema: loadSceneInput,
|
|
33
|
-
outputSchema: loadSceneOutput,
|
|
32
|
+
inputSchema: z.object(loadSceneInput),
|
|
33
|
+
outputSchema: z.object(loadSceneOutput),
|
|
34
34
|
annotations: DESTRUCTIVE_TOOL_ANNOTATIONS,
|
|
35
35
|
}, async ({ id }) => {
|
|
36
36
|
const result = await bridge.loadStoredScene(id);
|
|
37
37
|
if (!result) {
|
|
38
|
-
throwMcpError(
|
|
38
|
+
throwMcpError(ProtocolErrorCode.InvalidParams, 'scene_not_found', { id });
|
|
39
39
|
}
|
|
40
40
|
try {
|
|
41
41
|
bridge.loadJSON(result.graph);
|
|
@@ -43,7 +43,7 @@ export function registerLoadScene(server, bridge) {
|
|
|
43
43
|
}
|
|
44
44
|
catch (err) {
|
|
45
45
|
const msg = err instanceof Error ? err.message : String(err);
|
|
46
|
-
throwMcpError(
|
|
46
|
+
throwMcpError(ProtocolErrorCode.InvalidRequest, `load_failed: ${msg}`, { id });
|
|
47
47
|
}
|
|
48
48
|
const payload = {
|
|
49
49
|
...sceneMetaPayload(result, result.graph),
|
|
@@ -22,7 +22,6 @@ export declare function sceneMetaPayload(meta: SceneMeta, graph?: SceneGraph): {
|
|
|
22
22
|
graphHash: string | undefined;
|
|
23
23
|
};
|
|
24
24
|
export declare function projectStatusPayload(status: ProjectStatus, nextStep?: string): {
|
|
25
|
-
nextStep?: string | undefined;
|
|
26
25
|
id: string;
|
|
27
26
|
projectId: string;
|
|
28
27
|
name: string;
|
|
@@ -41,6 +40,7 @@ export declare function projectStatusPayload(status: ProjectStatus, nextStep?: s
|
|
|
41
40
|
graphHash: string | null;
|
|
42
41
|
createdAt: string;
|
|
43
42
|
updatedAt: string;
|
|
43
|
+
nextStep?: string | undefined;
|
|
44
44
|
};
|
|
45
45
|
export declare function currentLevelContext(operations: SceneOperations): {
|
|
46
46
|
levelIds: string[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { SceneOperations } from '../../operations/index.js';
|
|
4
4
|
export declare const renameSceneInput: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/rename-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"rename-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/rename-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKvD,eAAO,MAAM,gBAAgB;IAC3B,EAAE;IACF,OAAO;IACP,eAAe;CAChB,CAAA;AAED,eAAO,MAAM,iBAAiB;IAC5B,EAAE;IACF,IAAI;IACJ,SAAS;IACT,YAAY;IACZ,OAAO;IACP,SAAS;IACT,SAAS;IACT,OAAO;IACP,SAAS;IACT,SAAS;CACV,CAAA;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA+CxF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { SceneNotFoundError, SceneVersionConflictError } from '../../storage/types.js';
|
|
3
3
|
import { DESTRUCTIVE_TOOL_ANNOTATIONS } from '../annotations.js';
|
|
4
|
-
import {
|
|
4
|
+
import { ProtocolErrorCode, throwMcpError } from '../errors.js';
|
|
5
5
|
export const renameSceneInput = {
|
|
6
6
|
id: z.string().min(1).max(64),
|
|
7
7
|
newName: z.string().min(1).max(200),
|
|
@@ -23,8 +23,8 @@ export function registerRenameScene(server, operations) {
|
|
|
23
23
|
server.registerTool('rename_scene', {
|
|
24
24
|
title: 'Rename scene',
|
|
25
25
|
description: 'Rename a scene in the SceneStore. Returns the updated SceneMeta. Optionally pass `expectedVersion` for optimistic concurrency.',
|
|
26
|
-
inputSchema: renameSceneInput,
|
|
27
|
-
outputSchema: renameSceneOutput,
|
|
26
|
+
inputSchema: z.object(renameSceneInput),
|
|
27
|
+
outputSchema: z.object(renameSceneOutput),
|
|
28
28
|
annotations: DESTRUCTIVE_TOOL_ANNOTATIONS,
|
|
29
29
|
}, async ({ id, newName, expectedVersion }) => {
|
|
30
30
|
try {
|
|
@@ -50,16 +50,16 @@ export function registerRenameScene(server, operations) {
|
|
|
50
50
|
}
|
|
51
51
|
catch (err) {
|
|
52
52
|
if (err instanceof SceneNotFoundError) {
|
|
53
|
-
throwMcpError(
|
|
53
|
+
throwMcpError(ProtocolErrorCode.InvalidParams, 'scene_not_found', { id });
|
|
54
54
|
}
|
|
55
55
|
if (err instanceof SceneVersionConflictError) {
|
|
56
|
-
throwMcpError(
|
|
56
|
+
throwMcpError(ProtocolErrorCode.InvalidRequest, 'version_conflict', {
|
|
57
57
|
id,
|
|
58
58
|
expectedVersion,
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
const msg = err instanceof Error ? err.message : String(err);
|
|
62
|
-
throwMcpError(
|
|
62
|
+
throwMcpError(ProtocolErrorCode.InternalError, msg);
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { SceneOperations } from '../../operations/index.js';
|
|
4
4
|
export declare const saveSceneInput: {
|
|
@@ -6,9 +6,10 @@ export declare const saveSceneInput: {
|
|
|
6
6
|
name: z.ZodString;
|
|
7
7
|
projectId: z.ZodOptional<z.ZodString>;
|
|
8
8
|
expectedVersion: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
replace: z.ZodOptional<z.ZodBoolean>;
|
|
9
10
|
saveMode: z.ZodDefault<z.ZodEnum<{
|
|
10
|
-
draft: "draft";
|
|
11
11
|
checkpoint: "checkpoint";
|
|
12
|
+
draft: "draft";
|
|
12
13
|
}>>;
|
|
13
14
|
publish: z.ZodOptional<z.ZodBoolean>;
|
|
14
15
|
thumbnail: z.ZodOptional<z.ZodString>;
|
|
@@ -31,12 +32,14 @@ export declare const saveSceneOutput: {
|
|
|
31
32
|
published: z.ZodBoolean;
|
|
32
33
|
isDraft: z.ZodBoolean;
|
|
33
34
|
saveMode: z.ZodEnum<{
|
|
34
|
-
draft: "draft";
|
|
35
35
|
checkpoint: "checkpoint";
|
|
36
|
+
draft: "draft";
|
|
36
37
|
}>;
|
|
37
38
|
graphHash: z.ZodOptional<z.ZodString>;
|
|
38
39
|
levelIds: z.ZodArray<z.ZodString>;
|
|
39
40
|
defaultLevelId: z.ZodNullable<z.ZodString>;
|
|
41
|
+
/** What the server changed in a provided graph before saving it, one line each. */
|
|
42
|
+
notes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
40
43
|
};
|
|
41
44
|
export declare function registerSaveScene(server: McpServer, bridge: SceneOperations): void;
|
|
42
45
|
//# sourceMappingURL=save-scene.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/save-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"save-scene.d.ts","sourceRoot":"","sources":["../../../src/tools/scene-lifecycle/save-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAU7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAOvD,eAAO,MAAM,cAAc;IACzB,EAAE;IACF,IAAI;IACJ,SAAS;IACT,eAAe;IACf,OAAO;IAMP,QAAQ;;;;IAMR,OAAO;IAMP,SAAS;IACT,mBAAmB;IAInB,KAAK;CAMN,CAAA;AAED,eAAO,MAAM,eAAe;IAC1B,EAAE;IACF,IAAI;IACJ,SAAS;IACT,YAAY;IACZ,OAAO;IACP,SAAS;IACT,SAAS;IACT,OAAO;IACP,SAAS;IACT,SAAS;IACT,GAAG;IACH,SAAS;IACT,SAAS;IACT,OAAO;IACP,QAAQ;;;;IACR,SAAS;IACT,QAAQ;IACR,cAAc;IACd,mFAAmF;IACnF,KAAK;CACN,CAAA;AAgFD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAqIlF"}
|