@openfairygui/mcp 0.2.0 → 0.3.0-alpha.1

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 CHANGED
@@ -10,9 +10,12 @@ It maps the backend P2 runtime surface into MCP tools:
10
10
 
11
11
  - `getCapabilities`
12
12
  - `openSession`
13
+ - `openProjectSession`
13
14
  - `getSession`
15
+ - `getProjectOutline`
14
16
  - `applyTransaction`
15
17
  - `saveSession`
18
+ - `materializeSession`
16
19
  - `closeSession`
17
20
  - `getEvents`
18
21
  - `getJob`
@@ -33,11 +36,13 @@ P1 also registers MCP-native ergonomics around the same backend surface:
33
36
  - read-only resources for identity snapshots:
34
37
  - `openfairygui://backend/capabilities`
35
38
  - `openfairygui://backend/session/{sessionId}`
39
+ - `openfairygui://backend/session/{sessionId}/outline`
36
40
  - `openfairygui://backend/cache/{sessionId}`
37
41
  - `openfairygui://backend/job/{sessionId}/{jobId}`
38
- - prompts for capability inspection, session open/inspect, revision-checked transactions, save, and runtime polling
42
+ - prompts for capability inspection, session open/inspect, project-outline inspection, revision-checked transactions, save, and runtime polling
39
43
 
40
44
  Resources return `application/json` text containing the unchanged backend result envelope. Parameterized polling remains tool-based: `getEvents` and `listJobs` are not exposed as resource URI query grammars.
45
+ The project outline is revision-bound and exposes package, resource, folder, display-node, controller-page, and transition identities for transaction planning. It intentionally omits source bytes and full property payloads.
41
46
 
42
47
  It does **not** redefine transaction selectors, transaction operations, path policy, session semantics, job semantics, cache semantics, or backend error envelopes. Those remain owned by `@openfairygui/backend`, `@openfairygui/functions`, and `@openfairygui/core`.
43
48
 
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_stdio = require("./stdio-eqd_tVeJ.cjs");
2
+ const require_stdio = require("./stdio-BqoMZ4QC.cjs");
3
3
  exports.OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI = require_stdio.OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI;
4
4
  exports.OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS = require_stdio.OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS;
5
5
  exports.OPENFAIRYGUI_BACKEND_PROMPT_NAMES = require_stdio.OPENFAIRYGUI_BACKEND_PROMPT_NAMES;
package/dist/index.d.cts CHANGED
@@ -6,9 +6,9 @@ import { z } from "zod";
6
6
 
7
7
  //#region src/tool-definitions.d.ts
8
8
  declare const OPENFAIRYGUI_BACKEND_TOOL_PREFIX = "openfairygui_backend_";
9
- declare const OPENFAIRYGUI_BACKEND_TOOL_NAMES: readonly ["openfairygui_backend_get_capabilities", "openfairygui_backend_open_session", "openfairygui_backend_open_project_session", "openfairygui_backend_get_session", "openfairygui_backend_apply_transaction", "openfairygui_backend_save_session", "openfairygui_backend_materialize_session", "openfairygui_backend_close_session", "openfairygui_backend_get_events", "openfairygui_backend_get_job", "openfairygui_backend_list_jobs", "openfairygui_backend_cancel_job", "openfairygui_backend_get_cache_snapshot", "openfairygui_backend_refresh_cache"];
9
+ declare const OPENFAIRYGUI_BACKEND_TOOL_NAMES: readonly ["openfairygui_backend_get_capabilities", "openfairygui_backend_open_session", "openfairygui_backend_open_project_session", "openfairygui_backend_get_session", "openfairygui_backend_get_project_outline", "openfairygui_backend_apply_transaction", "openfairygui_backend_save_session", "openfairygui_backend_materialize_session", "openfairygui_backend_close_session", "openfairygui_backend_get_events", "openfairygui_backend_get_job", "openfairygui_backend_list_jobs", "openfairygui_backend_cancel_job", "openfairygui_backend_get_cache_snapshot", "openfairygui_backend_refresh_cache"];
10
10
  type OpenFairyGuiBackendToolName = typeof OPENFAIRYGUI_BACKEND_TOOL_NAMES[number];
11
- type BackendMethodName = 'getCapabilities' | 'openSession' | 'openProjectSession' | 'getSession' | 'applyTransaction' | 'saveSession' | 'materializeSession' | 'closeSession' | 'getEvents' | 'getJob' | 'listJobs' | 'cancelJob' | 'getCacheSnapshot' | 'refreshCache';
11
+ type BackendMethodName = 'getCapabilities' | 'openSession' | 'openProjectSession' | 'getSession' | 'getProjectOutline' | 'applyTransaction' | 'saveSession' | 'materializeSession' | 'closeSession' | 'getEvents' | 'getJob' | 'listJobs' | 'cancelJob' | 'getCacheSnapshot' | 'refreshCache';
12
12
  interface OpenFairyGuiBackendToolDefinition {
13
13
  name: OpenFairyGuiBackendToolName;
14
14
  backendMethod: BackendMethodName;
@@ -116,6 +116,27 @@ declare const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS: readonly [{
116
116
  readonly idempotentHint: true;
117
117
  readonly openWorldHint: false;
118
118
  };
119
+ }, {
120
+ readonly name: "openfairygui_backend_get_project_outline";
121
+ readonly backendMethod: "getProjectOutline";
122
+ readonly title: "Get Project Outline";
123
+ readonly description: "Return a revision-bound project/package/resource/component identity outline without source bytes or full property payloads.";
124
+ readonly inputSchema: z.ZodObject<{
125
+ sessionId: z.ZodString;
126
+ }, z.core.$strip>;
127
+ readonly outputSchema: z.ZodObject<{
128
+ backendResult: z.ZodObject<{
129
+ ok: z.ZodBoolean;
130
+ data: z.ZodOptional<z.ZodUnknown>;
131
+ error: z.ZodOptional<z.ZodUnknown>;
132
+ meta: z.ZodOptional<z.ZodUnknown>;
133
+ }, z.core.$loose>;
134
+ }, z.core.$strip>;
135
+ readonly annotations: {
136
+ readonly readOnlyHint: true;
137
+ readonly idempotentHint: true;
138
+ readonly openWorldHint: false;
139
+ };
119
140
  }, {
120
141
  readonly name: "openfairygui_backend_apply_transaction";
121
142
  readonly backendMethod: "applyTransaction";
@@ -361,7 +382,7 @@ declare const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS: readonly [{
361
382
  }];
362
383
  //#endregion
363
384
  //#region src/tool-handler.d.ts
364
- type OpenFairyGuiBackendRuntime = Pick<BackendRuntime, 'getCapabilities' | 'openSession' | 'openProjectSession' | 'getSession' | 'applyTransaction' | 'saveSession' | 'materializeSession' | 'closeSession' | 'getEvents' | 'getJob' | 'listJobs' | 'cancelJob' | 'getCacheSnapshot' | 'refreshCache'>;
385
+ type OpenFairyGuiBackendRuntime = Pick<BackendRuntime, 'getCapabilities' | 'openSession' | 'openProjectSession' | 'getSession' | 'getProjectOutline' | 'applyTransaction' | 'saveSession' | 'materializeSession' | 'closeSession' | 'getEvents' | 'getJob' | 'listJobs' | 'cancelJob' | 'getCacheSnapshot' | 'refreshCache'>;
365
386
  declare function callOpenFairyGuiBackendTool(runtime: OpenFairyGuiBackendRuntime, name: OpenFairyGuiBackendToolName, input: Record<string, unknown>): Promise<CallToolResult>;
366
387
  //#endregion
367
388
  //#region src/server.d.ts
@@ -373,7 +394,7 @@ interface CreateOpenFairyGuiMcpServerOptions {
373
394
  declare function createOpenFairyGuiMcpServer(options?: CreateOpenFairyGuiMcpServerOptions): McpServer;
374
395
  //#endregion
375
396
  //#region src/prompt-definitions.d.ts
376
- declare const OPENFAIRYGUI_BACKEND_PROMPT_NAMES: readonly ["openfairygui_inspect_capabilities", "openfairygui_open_and_inspect_session", "openfairygui_plan_revision_checked_transaction", "openfairygui_save_session", "openfairygui_poll_runtime_state"];
397
+ declare const OPENFAIRYGUI_BACKEND_PROMPT_NAMES: readonly ["openfairygui_inspect_capabilities", "openfairygui_open_and_inspect_session", "openfairygui_inspect_project_outline", "openfairygui_plan_revision_checked_transaction", "openfairygui_save_session", "openfairygui_poll_runtime_state"];
377
398
  type OpenFairyGuiBackendPromptName = typeof OPENFAIRYGUI_BACKEND_PROMPT_NAMES[number];
378
399
  declare const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS: readonly [{
379
400
  readonly name: "openfairygui_inspect_capabilities";
@@ -385,6 +406,11 @@ declare const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS: readonly [{
385
406
  readonly title: "Open and Inspect an OpenFairyGUI Session";
386
407
  readonly description: "Guide a client through opening and reading a backend session.";
387
408
  readonly text: string;
409
+ }, {
410
+ readonly name: "openfairygui_inspect_project_outline";
411
+ readonly title: "Inspect an OpenFairyGUI Project Outline";
412
+ readonly description: "Guide a client through selector discovery before a revision-checked transaction.";
413
+ readonly text: string;
388
414
  }, {
389
415
  readonly name: "openfairygui_plan_revision_checked_transaction";
390
416
  readonly title: "Plan a Revision-Checked OpenFairyGUI Transaction";
@@ -404,6 +430,6 @@ declare const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS: readonly [{
404
430
  //#endregion
405
431
  //#region src/resource-definitions.d.ts
406
432
  declare const OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI = "openfairygui://backend/capabilities";
407
- declare const OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES: readonly ["openfairygui://backend/session/{sessionId}", "openfairygui://backend/cache/{sessionId}", "openfairygui://backend/job/{sessionId}/{jobId}"];
433
+ declare const OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES: readonly ["openfairygui://backend/session/{sessionId}", "openfairygui://backend/session/{sessionId}/outline", "openfairygui://backend/cache/{sessionId}", "openfairygui://backend/job/{sessionId}/{jobId}"];
408
434
  //#endregion
409
435
  export { type BackendMethodName, type CreateOpenFairyGuiMcpServerOptions, OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI, OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS, OPENFAIRYGUI_BACKEND_PROMPT_NAMES, OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES, OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS, OPENFAIRYGUI_BACKEND_TOOL_NAMES, OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA, OPENFAIRYGUI_BACKEND_TOOL_PREFIX, type OpenFairyGuiBackendPromptName, type OpenFairyGuiBackendRuntime, type OpenFairyGuiBackendToolDefinition, type OpenFairyGuiBackendToolName, callOpenFairyGuiBackendTool, connectOpenFairyGuiMcpStdio, createOpenFairyGuiMcpServer };
package/dist/index.d.mts CHANGED
@@ -6,9 +6,9 @@ import { BackendRuntime } from "@openfairygui/backend";
6
6
 
7
7
  //#region src/tool-definitions.d.ts
8
8
  declare const OPENFAIRYGUI_BACKEND_TOOL_PREFIX = "openfairygui_backend_";
9
- declare const OPENFAIRYGUI_BACKEND_TOOL_NAMES: readonly ["openfairygui_backend_get_capabilities", "openfairygui_backend_open_session", "openfairygui_backend_open_project_session", "openfairygui_backend_get_session", "openfairygui_backend_apply_transaction", "openfairygui_backend_save_session", "openfairygui_backend_materialize_session", "openfairygui_backend_close_session", "openfairygui_backend_get_events", "openfairygui_backend_get_job", "openfairygui_backend_list_jobs", "openfairygui_backend_cancel_job", "openfairygui_backend_get_cache_snapshot", "openfairygui_backend_refresh_cache"];
9
+ declare const OPENFAIRYGUI_BACKEND_TOOL_NAMES: readonly ["openfairygui_backend_get_capabilities", "openfairygui_backend_open_session", "openfairygui_backend_open_project_session", "openfairygui_backend_get_session", "openfairygui_backend_get_project_outline", "openfairygui_backend_apply_transaction", "openfairygui_backend_save_session", "openfairygui_backend_materialize_session", "openfairygui_backend_close_session", "openfairygui_backend_get_events", "openfairygui_backend_get_job", "openfairygui_backend_list_jobs", "openfairygui_backend_cancel_job", "openfairygui_backend_get_cache_snapshot", "openfairygui_backend_refresh_cache"];
10
10
  type OpenFairyGuiBackendToolName = typeof OPENFAIRYGUI_BACKEND_TOOL_NAMES[number];
11
- type BackendMethodName = 'getCapabilities' | 'openSession' | 'openProjectSession' | 'getSession' | 'applyTransaction' | 'saveSession' | 'materializeSession' | 'closeSession' | 'getEvents' | 'getJob' | 'listJobs' | 'cancelJob' | 'getCacheSnapshot' | 'refreshCache';
11
+ type BackendMethodName = 'getCapabilities' | 'openSession' | 'openProjectSession' | 'getSession' | 'getProjectOutline' | 'applyTransaction' | 'saveSession' | 'materializeSession' | 'closeSession' | 'getEvents' | 'getJob' | 'listJobs' | 'cancelJob' | 'getCacheSnapshot' | 'refreshCache';
12
12
  interface OpenFairyGuiBackendToolDefinition {
13
13
  name: OpenFairyGuiBackendToolName;
14
14
  backendMethod: BackendMethodName;
@@ -116,6 +116,27 @@ declare const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS: readonly [{
116
116
  readonly idempotentHint: true;
117
117
  readonly openWorldHint: false;
118
118
  };
119
+ }, {
120
+ readonly name: "openfairygui_backend_get_project_outline";
121
+ readonly backendMethod: "getProjectOutline";
122
+ readonly title: "Get Project Outline";
123
+ readonly description: "Return a revision-bound project/package/resource/component identity outline without source bytes or full property payloads.";
124
+ readonly inputSchema: z.ZodObject<{
125
+ sessionId: z.ZodString;
126
+ }, z.core.$strip>;
127
+ readonly outputSchema: z.ZodObject<{
128
+ backendResult: z.ZodObject<{
129
+ ok: z.ZodBoolean;
130
+ data: z.ZodOptional<z.ZodUnknown>;
131
+ error: z.ZodOptional<z.ZodUnknown>;
132
+ meta: z.ZodOptional<z.ZodUnknown>;
133
+ }, z.core.$loose>;
134
+ }, z.core.$strip>;
135
+ readonly annotations: {
136
+ readonly readOnlyHint: true;
137
+ readonly idempotentHint: true;
138
+ readonly openWorldHint: false;
139
+ };
119
140
  }, {
120
141
  readonly name: "openfairygui_backend_apply_transaction";
121
142
  readonly backendMethod: "applyTransaction";
@@ -361,7 +382,7 @@ declare const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS: readonly [{
361
382
  }];
362
383
  //#endregion
363
384
  //#region src/tool-handler.d.ts
364
- type OpenFairyGuiBackendRuntime = Pick<BackendRuntime, 'getCapabilities' | 'openSession' | 'openProjectSession' | 'getSession' | 'applyTransaction' | 'saveSession' | 'materializeSession' | 'closeSession' | 'getEvents' | 'getJob' | 'listJobs' | 'cancelJob' | 'getCacheSnapshot' | 'refreshCache'>;
385
+ type OpenFairyGuiBackendRuntime = Pick<BackendRuntime, 'getCapabilities' | 'openSession' | 'openProjectSession' | 'getSession' | 'getProjectOutline' | 'applyTransaction' | 'saveSession' | 'materializeSession' | 'closeSession' | 'getEvents' | 'getJob' | 'listJobs' | 'cancelJob' | 'getCacheSnapshot' | 'refreshCache'>;
365
386
  declare function callOpenFairyGuiBackendTool(runtime: OpenFairyGuiBackendRuntime, name: OpenFairyGuiBackendToolName, input: Record<string, unknown>): Promise<CallToolResult>;
366
387
  //#endregion
367
388
  //#region src/server.d.ts
@@ -373,7 +394,7 @@ interface CreateOpenFairyGuiMcpServerOptions {
373
394
  declare function createOpenFairyGuiMcpServer(options?: CreateOpenFairyGuiMcpServerOptions): McpServer;
374
395
  //#endregion
375
396
  //#region src/prompt-definitions.d.ts
376
- declare const OPENFAIRYGUI_BACKEND_PROMPT_NAMES: readonly ["openfairygui_inspect_capabilities", "openfairygui_open_and_inspect_session", "openfairygui_plan_revision_checked_transaction", "openfairygui_save_session", "openfairygui_poll_runtime_state"];
397
+ declare const OPENFAIRYGUI_BACKEND_PROMPT_NAMES: readonly ["openfairygui_inspect_capabilities", "openfairygui_open_and_inspect_session", "openfairygui_inspect_project_outline", "openfairygui_plan_revision_checked_transaction", "openfairygui_save_session", "openfairygui_poll_runtime_state"];
377
398
  type OpenFairyGuiBackendPromptName = typeof OPENFAIRYGUI_BACKEND_PROMPT_NAMES[number];
378
399
  declare const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS: readonly [{
379
400
  readonly name: "openfairygui_inspect_capabilities";
@@ -385,6 +406,11 @@ declare const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS: readonly [{
385
406
  readonly title: "Open and Inspect an OpenFairyGUI Session";
386
407
  readonly description: "Guide a client through opening and reading a backend session.";
387
408
  readonly text: string;
409
+ }, {
410
+ readonly name: "openfairygui_inspect_project_outline";
411
+ readonly title: "Inspect an OpenFairyGUI Project Outline";
412
+ readonly description: "Guide a client through selector discovery before a revision-checked transaction.";
413
+ readonly text: string;
388
414
  }, {
389
415
  readonly name: "openfairygui_plan_revision_checked_transaction";
390
416
  readonly title: "Plan a Revision-Checked OpenFairyGUI Transaction";
@@ -404,6 +430,6 @@ declare const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS: readonly [{
404
430
  //#endregion
405
431
  //#region src/resource-definitions.d.ts
406
432
  declare const OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI = "openfairygui://backend/capabilities";
407
- declare const OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES: readonly ["openfairygui://backend/session/{sessionId}", "openfairygui://backend/cache/{sessionId}", "openfairygui://backend/job/{sessionId}/{jobId}"];
433
+ declare const OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES: readonly ["openfairygui://backend/session/{sessionId}", "openfairygui://backend/session/{sessionId}/outline", "openfairygui://backend/cache/{sessionId}", "openfairygui://backend/job/{sessionId}/{jobId}"];
408
434
  //#endregion
409
435
  export { type BackendMethodName, type CreateOpenFairyGuiMcpServerOptions, OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI, OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS, OPENFAIRYGUI_BACKEND_PROMPT_NAMES, OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES, OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS, OPENFAIRYGUI_BACKEND_TOOL_NAMES, OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA, OPENFAIRYGUI_BACKEND_TOOL_PREFIX, type OpenFairyGuiBackendPromptName, type OpenFairyGuiBackendRuntime, type OpenFairyGuiBackendToolDefinition, type OpenFairyGuiBackendToolName, callOpenFairyGuiBackendTool, connectOpenFairyGuiMcpStdio, createOpenFairyGuiMcpServer };
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { a as OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA, c as OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI, d as OPENFAIRYGUI_BACKEND_PROMPT_NAMES, i as OPENFAIRYGUI_BACKEND_TOOL_NAMES, l as OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES, n as createOpenFairyGuiMcpServer, o as OPENFAIRYGUI_BACKEND_TOOL_PREFIX, r as OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS, s as callOpenFairyGuiBackendTool, t as connectOpenFairyGuiMcpStdio, u as OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS } from "./stdio-AonL7fG4.mjs";
1
+ import { a as OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA, c as OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI, d as OPENFAIRYGUI_BACKEND_PROMPT_NAMES, i as OPENFAIRYGUI_BACKEND_TOOL_NAMES, l as OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES, n as createOpenFairyGuiMcpServer, o as OPENFAIRYGUI_BACKEND_TOOL_PREFIX, r as OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS, s as callOpenFairyGuiBackendTool, t as connectOpenFairyGuiMcpStdio, u as OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS } from "./stdio-C69hamhI.mjs";
2
2
  export { OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI, OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS, OPENFAIRYGUI_BACKEND_PROMPT_NAMES, OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES, OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS, OPENFAIRYGUI_BACKEND_TOOL_NAMES, OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA, OPENFAIRYGUI_BACKEND_TOOL_PREFIX, callOpenFairyGuiBackendTool, connectOpenFairyGuiMcpStdio, createOpenFairyGuiMcpServer };
@@ -8,6 +8,7 @@ let node_url = require("node:url");
8
8
  const OPENFAIRYGUI_BACKEND_PROMPT_NAMES = [
9
9
  "openfairygui_inspect_capabilities",
10
10
  "openfairygui_open_and_inspect_session",
11
+ "openfairygui_inspect_project_outline",
11
12
  "openfairygui_plan_revision_checked_transaction",
12
13
  "openfairygui_save_session",
13
14
  "openfairygui_poll_runtime_state"
@@ -33,6 +34,17 @@ const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS = [
33
34
  "Close the session with openfairygui_backend_close_session when finished."
34
35
  ].join("\n")
35
36
  },
37
+ {
38
+ name: "openfairygui_inspect_project_outline",
39
+ title: "Inspect an OpenFairyGUI Project Outline",
40
+ description: "Guide a client through selector discovery before a revision-checked transaction.",
41
+ text: [
42
+ "Use openfairygui_backend_get_project_outline with the active sessionId before planning mutations.",
43
+ "Use package, resource, folder, display node, controller page, and transition identities from the returned outline.",
44
+ "Pass the returned revision as expectedRevision when calling openfairygui_backend_apply_transaction.",
45
+ "Read a new outline if the backend reports a stale revision; the outline intentionally excludes source bytes and full property payloads."
46
+ ].join("\n")
47
+ },
36
48
  {
37
49
  name: "openfairygui_plan_revision_checked_transaction",
38
50
  title: "Plan a Revision-Checked OpenFairyGUI Transaction",
@@ -97,6 +109,7 @@ function jsonResource(uri, backendResult) {
97
109
  const OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI = "openfairygui://backend/capabilities";
98
110
  const OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES = [
99
111
  "openfairygui://backend/session/{sessionId}",
112
+ "openfairygui://backend/session/{sessionId}/outline",
100
113
  "openfairygui://backend/cache/{sessionId}",
101
114
  "openfairygui://backend/job/{sessionId}/{jobId}"
102
115
  ];
@@ -111,6 +124,11 @@ function registerOpenFairyGuiBackendResources(server, runtime) {
111
124
  description: "Read a backend session envelope by backend-local session id.",
112
125
  mimeType: JSON_MIME_TYPE
113
126
  }, (uri, variables) => jsonResource(uri, runtime.getSession({ sessionId: firstVariable(variables.sessionId) })));
127
+ server.registerResource("openfairygui_backend_project_outline", new _modelcontextprotocol_sdk_server_mcp_js.ResourceTemplate("openfairygui://backend/session/{sessionId}/outline", { list: void 0 }), {
128
+ title: "OpenFairyGUI Project Outline",
129
+ description: "Read a revision-bound project identity outline without source bytes or full property payloads.",
130
+ mimeType: JSON_MIME_TYPE
131
+ }, (uri, variables) => jsonResource(uri, runtime.getProjectOutline({ sessionId: firstVariable(variables.sessionId) })));
114
132
  server.registerResource("openfairygui_backend_cache", new _modelcontextprotocol_sdk_server_mcp_js.ResourceTemplate("openfairygui://backend/cache/{sessionId}", { list: void 0 }), {
115
133
  title: "OpenFairyGUI Backend Cache Snapshot",
116
134
  description: "Read a derived backend cache envelope by backend-local session id.",
@@ -160,6 +178,9 @@ async function callOpenFairyGuiBackendTool(runtime, name, input) {
160
178
  case "openfairygui_backend_get_session":
161
179
  result = runtime.getSession({ sessionId: String(input.sessionId) });
162
180
  break;
181
+ case "openfairygui_backend_get_project_outline":
182
+ result = runtime.getProjectOutline({ sessionId: String(input.sessionId) });
183
+ break;
163
184
  case "openfairygui_backend_apply_transaction":
164
185
  result = await runtime.applyTransaction({
165
186
  sessionId: String(input.sessionId),
@@ -235,6 +256,7 @@ const OPENFAIRYGUI_BACKEND_TOOL_NAMES = [
235
256
  "openfairygui_backend_open_session",
236
257
  "openfairygui_backend_open_project_session",
237
258
  "openfairygui_backend_get_session",
259
+ "openfairygui_backend_get_project_outline",
238
260
  "openfairygui_backend_apply_transaction",
239
261
  "openfairygui_backend_save_session",
240
262
  "openfairygui_backend_materialize_session",
@@ -314,6 +336,19 @@ const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS = [
314
336
  openWorldHint: false
315
337
  }
316
338
  },
339
+ {
340
+ name: "openfairygui_backend_get_project_outline",
341
+ backendMethod: "getProjectOutline",
342
+ title: "Get Project Outline",
343
+ description: "Return a revision-bound project/package/resource/component identity outline without source bytes or full property payloads.",
344
+ inputSchema: zod.z.object({ sessionId }),
345
+ outputSchema: OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA,
346
+ annotations: {
347
+ readOnlyHint: true,
348
+ idempotentHint: true,
349
+ openWorldHint: false
350
+ }
351
+ },
317
352
  {
318
353
  name: "openfairygui_backend_apply_transaction",
319
354
  backendMethod: "applyTransaction",
@@ -497,7 +532,7 @@ const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS = [
497
532
  //#region src/server.ts
498
533
  const require$1 = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href);
499
534
  function getInjectedPackageVersion() {
500
- const version = "0.2.0";
535
+ const version = "0.3.0-alpha.1";
501
536
  return typeof version === "string" && true ? version : null;
502
537
  }
503
538
  function readPackageVersion() {
@@ -8,6 +8,7 @@ import { pathToFileURL } from "node:url";
8
8
  const OPENFAIRYGUI_BACKEND_PROMPT_NAMES = [
9
9
  "openfairygui_inspect_capabilities",
10
10
  "openfairygui_open_and_inspect_session",
11
+ "openfairygui_inspect_project_outline",
11
12
  "openfairygui_plan_revision_checked_transaction",
12
13
  "openfairygui_save_session",
13
14
  "openfairygui_poll_runtime_state"
@@ -33,6 +34,17 @@ const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS = [
33
34
  "Close the session with openfairygui_backend_close_session when finished."
34
35
  ].join("\n")
35
36
  },
37
+ {
38
+ name: "openfairygui_inspect_project_outline",
39
+ title: "Inspect an OpenFairyGUI Project Outline",
40
+ description: "Guide a client through selector discovery before a revision-checked transaction.",
41
+ text: [
42
+ "Use openfairygui_backend_get_project_outline with the active sessionId before planning mutations.",
43
+ "Use package, resource, folder, display node, controller page, and transition identities from the returned outline.",
44
+ "Pass the returned revision as expectedRevision when calling openfairygui_backend_apply_transaction.",
45
+ "Read a new outline if the backend reports a stale revision; the outline intentionally excludes source bytes and full property payloads."
46
+ ].join("\n")
47
+ },
36
48
  {
37
49
  name: "openfairygui_plan_revision_checked_transaction",
38
50
  title: "Plan a Revision-Checked OpenFairyGUI Transaction",
@@ -97,6 +109,7 @@ function jsonResource(uri, backendResult) {
97
109
  const OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI = "openfairygui://backend/capabilities";
98
110
  const OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES = [
99
111
  "openfairygui://backend/session/{sessionId}",
112
+ "openfairygui://backend/session/{sessionId}/outline",
100
113
  "openfairygui://backend/cache/{sessionId}",
101
114
  "openfairygui://backend/job/{sessionId}/{jobId}"
102
115
  ];
@@ -111,6 +124,11 @@ function registerOpenFairyGuiBackendResources(server, runtime) {
111
124
  description: "Read a backend session envelope by backend-local session id.",
112
125
  mimeType: JSON_MIME_TYPE
113
126
  }, (uri, variables) => jsonResource(uri, runtime.getSession({ sessionId: firstVariable(variables.sessionId) })));
127
+ server.registerResource("openfairygui_backend_project_outline", new ResourceTemplate("openfairygui://backend/session/{sessionId}/outline", { list: void 0 }), {
128
+ title: "OpenFairyGUI Project Outline",
129
+ description: "Read a revision-bound project identity outline without source bytes or full property payloads.",
130
+ mimeType: JSON_MIME_TYPE
131
+ }, (uri, variables) => jsonResource(uri, runtime.getProjectOutline({ sessionId: firstVariable(variables.sessionId) })));
114
132
  server.registerResource("openfairygui_backend_cache", new ResourceTemplate("openfairygui://backend/cache/{sessionId}", { list: void 0 }), {
115
133
  title: "OpenFairyGUI Backend Cache Snapshot",
116
134
  description: "Read a derived backend cache envelope by backend-local session id.",
@@ -160,6 +178,9 @@ async function callOpenFairyGuiBackendTool(runtime, name, input) {
160
178
  case "openfairygui_backend_get_session":
161
179
  result = runtime.getSession({ sessionId: String(input.sessionId) });
162
180
  break;
181
+ case "openfairygui_backend_get_project_outline":
182
+ result = runtime.getProjectOutline({ sessionId: String(input.sessionId) });
183
+ break;
163
184
  case "openfairygui_backend_apply_transaction":
164
185
  result = await runtime.applyTransaction({
165
186
  sessionId: String(input.sessionId),
@@ -235,6 +256,7 @@ const OPENFAIRYGUI_BACKEND_TOOL_NAMES = [
235
256
  "openfairygui_backend_open_session",
236
257
  "openfairygui_backend_open_project_session",
237
258
  "openfairygui_backend_get_session",
259
+ "openfairygui_backend_get_project_outline",
238
260
  "openfairygui_backend_apply_transaction",
239
261
  "openfairygui_backend_save_session",
240
262
  "openfairygui_backend_materialize_session",
@@ -314,6 +336,19 @@ const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS = [
314
336
  openWorldHint: false
315
337
  }
316
338
  },
339
+ {
340
+ name: "openfairygui_backend_get_project_outline",
341
+ backendMethod: "getProjectOutline",
342
+ title: "Get Project Outline",
343
+ description: "Return a revision-bound project/package/resource/component identity outline without source bytes or full property payloads.",
344
+ inputSchema: z.object({ sessionId }),
345
+ outputSchema: OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA,
346
+ annotations: {
347
+ readOnlyHint: true,
348
+ idempotentHint: true,
349
+ openWorldHint: false
350
+ }
351
+ },
317
352
  {
318
353
  name: "openfairygui_backend_apply_transaction",
319
354
  backendMethod: "applyTransaction",
@@ -497,7 +532,7 @@ const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS = [
497
532
  //#region src/server.ts
498
533
  const require = createRequire(import.meta.url);
499
534
  function getInjectedPackageVersion() {
500
- const version = "0.2.0";
535
+ const version = "0.3.0-alpha.1";
501
536
  return typeof version === "string" && true ? version : null;
502
537
  }
503
538
  function readPackageVersion() {
package/dist/stdio.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_stdio = require("./stdio-eqd_tVeJ.cjs");
2
+ const require_stdio = require("./stdio-BqoMZ4QC.cjs");
3
3
  exports.connectOpenFairyGuiMcpStdio = require_stdio.connectOpenFairyGuiMcpStdio;
package/dist/stdio.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { t as connectOpenFairyGuiMcpStdio } from "./stdio-AonL7fG4.mjs";
1
+ import { t as connectOpenFairyGuiMcpStdio } from "./stdio-C69hamhI.mjs";
2
2
  export { connectOpenFairyGuiMcpStdio };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfairygui/mcp",
3
- "version": "0.2.0",
3
+ "version": "0.3.0-alpha.1",
4
4
  "description": "FairyGUI Headless Authoring SDK - MCP server adapter for the backend runtime.",
5
5
  "author": "OpenFairyGUI Contributors",
6
6
  "license": "MIT",
@@ -58,13 +58,13 @@
58
58
  "dependencies": {
59
59
  "@modelcontextprotocol/sdk": "^1.29.0",
60
60
  "zod": "^4.3.6",
61
- "@openfairygui/backend": "0.2.0"
61
+ "@openfairygui/backend": "0.3.0-alpha.1"
62
62
  },
63
63
  "devDependencies": {
64
64
  "ava": "^7.0.0",
65
65
  "tsx": "^4.0.0",
66
66
  "@openfairygui/test-utils": "0.2.0-alpha.10",
67
- "@openfairygui/core": "0.2.0"
67
+ "@openfairygui/core": "0.3.0-alpha.1"
68
68
  },
69
69
  "ava": {
70
70
  "extensions": {
@@ -3,6 +3,7 @@ import type { GetPromptResult } from '@modelcontextprotocol/sdk/types.js';
3
3
  export const OPENFAIRYGUI_BACKEND_PROMPT_NAMES = [
4
4
  'openfairygui_inspect_capabilities',
5
5
  'openfairygui_open_and_inspect_session',
6
+ 'openfairygui_inspect_project_outline',
6
7
  'openfairygui_plan_revision_checked_transaction',
7
8
  'openfairygui_save_session',
8
9
  'openfairygui_poll_runtime_state',
@@ -38,6 +39,17 @@ export const OPENFAIRYGUI_BACKEND_PROMPT_DEFINITIONS = [
38
39
  'Close the session with openfairygui_backend_close_session when finished.',
39
40
  ].join('\n'),
40
41
  },
42
+ {
43
+ name: 'openfairygui_inspect_project_outline',
44
+ title: 'Inspect an OpenFairyGUI Project Outline',
45
+ description: 'Guide a client through selector discovery before a revision-checked transaction.',
46
+ text: [
47
+ 'Use openfairygui_backend_get_project_outline with the active sessionId before planning mutations.',
48
+ 'Use package, resource, folder, display node, controller page, and transition identities from the returned outline.',
49
+ 'Pass the returned revision as expectedRevision when calling openfairygui_backend_apply_transaction.',
50
+ 'Read a new outline if the backend reports a stale revision; the outline intentionally excludes source bytes and full property payloads.',
51
+ ].join('\n'),
52
+ },
41
53
  {
42
54
  name: 'openfairygui_plan_revision_checked_transaction',
43
55
  title: 'Plan a Revision-Checked OpenFairyGUI Transaction',
@@ -24,6 +24,7 @@ export const OPENFAIRYGUI_BACKEND_CAPABILITIES_RESOURCE_URI = 'openfairygui://ba
24
24
 
25
25
  export const OPENFAIRYGUI_BACKEND_RESOURCE_TEMPLATES = [
26
26
  'openfairygui://backend/session/{sessionId}',
27
+ 'openfairygui://backend/session/{sessionId}/outline',
27
28
  'openfairygui://backend/cache/{sessionId}',
28
29
  'openfairygui://backend/job/{sessionId}/{jobId}',
29
30
  ] as const;
@@ -53,6 +54,19 @@ export function registerOpenFairyGuiBackendResources(server: McpServer, runtime:
53
54
  })),
54
55
  );
55
56
 
57
+ server.registerResource(
58
+ 'openfairygui_backend_project_outline',
59
+ new ResourceTemplate('openfairygui://backend/session/{sessionId}/outline', { list: undefined }),
60
+ {
61
+ title: 'OpenFairyGUI Project Outline',
62
+ description: 'Read a revision-bound project identity outline without source bytes or full property payloads.',
63
+ mimeType: JSON_MIME_TYPE,
64
+ },
65
+ (uri: URL, variables) => jsonResource(uri, runtime.getProjectOutline({
66
+ sessionId: firstVariable(variables.sessionId),
67
+ })),
68
+ );
69
+
56
70
  server.registerResource(
57
71
  'openfairygui_backend_cache',
58
72
  new ResourceTemplate('openfairygui://backend/cache/{sessionId}', { list: undefined }),
@@ -7,6 +7,7 @@ export const OPENFAIRYGUI_BACKEND_TOOL_NAMES = [
7
7
  'openfairygui_backend_open_session',
8
8
  'openfairygui_backend_open_project_session',
9
9
  'openfairygui_backend_get_session',
10
+ 'openfairygui_backend_get_project_outline',
10
11
  'openfairygui_backend_apply_transaction',
11
12
  'openfairygui_backend_save_session',
12
13
  'openfairygui_backend_materialize_session',
@@ -26,6 +27,7 @@ export type BackendMethodName =
26
27
  | 'openSession'
27
28
  | 'openProjectSession'
28
29
  | 'getSession'
30
+ | 'getProjectOutline'
29
31
  | 'applyTransaction'
30
32
  | 'saveSession'
31
33
  | 'materializeSession'
@@ -110,6 +112,15 @@ export const OPENFAIRYGUI_BACKEND_TOOL_DEFINITIONS = [
110
112
  outputSchema: OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA,
111
113
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
112
114
  },
115
+ {
116
+ name: 'openfairygui_backend_get_project_outline',
117
+ backendMethod: 'getProjectOutline',
118
+ title: 'Get Project Outline',
119
+ description: 'Return a revision-bound project/package/resource/component identity outline without source bytes or full property payloads.',
120
+ inputSchema: z.object({ sessionId }),
121
+ outputSchema: OPENFAIRYGUI_BACKEND_TOOL_OUTPUT_SCHEMA,
122
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
123
+ },
113
124
  {
114
125
  name: 'openfairygui_backend_apply_transaction',
115
126
  backendMethod: 'applyTransaction',
@@ -8,6 +8,7 @@ export type OpenFairyGuiBackendRuntime = Pick<
8
8
  | 'openSession'
9
9
  | 'openProjectSession'
10
10
  | 'getSession'
11
+ | 'getProjectOutline'
11
12
  | 'applyTransaction'
12
13
  | 'saveSession'
13
14
  | 'materializeSession'
@@ -70,6 +71,11 @@ export async function callOpenFairyGuiBackendTool(
70
71
  sessionId: String(input.sessionId),
71
72
  });
72
73
  break;
74
+ case 'openfairygui_backend_get_project_outline':
75
+ result = runtime.getProjectOutline({
76
+ sessionId: String(input.sessionId),
77
+ });
78
+ break;
73
79
  case 'openfairygui_backend_apply_transaction':
74
80
  result = await runtime.applyTransaction({
75
81
  sessionId: String(input.sessionId),