@elementor/editor-mcp 3.33.0-172 → 3.33.0-174

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/dist/index.js CHANGED
@@ -74,7 +74,7 @@ async function activateMcpRegistration(sdk2) {
74
74
  }
75
75
  }
76
76
  var isAlphabet = (str) => {
77
- const passes = !!str && /^[a-z]+$/.test(str);
77
+ const passes = !!str && /^[a-z_]+$/.test(str);
78
78
  if (!passes) {
79
79
  throw new Error("Not alphabet");
80
80
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/mcp-registry.ts","../src/test-utils/mock-mcp-registry.ts"],"sourcesContent":["import { getSDK } from './init';\n\nexport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nexport { init } from './init';\nexport * from './mcp-registry';\nexport const getAngieSdk = () => getSDK();\n","import { isExperimentActive } from '@elementor/editor-v1-adapters';\nimport { AngieMcpSdk } from '@elementor-external/angie-sdk';\n\nimport { activateMcpRegistration } from './mcp-registry';\n\nlet sdk: AngieMcpSdk;\n\nexport const getSDK = () => {\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn {} as unknown as AngieMcpSdk;\n\t}\n\tif ( ! sdk ) {\n\t\tsdk = new AngieMcpSdk();\n\t}\n\treturn sdk;\n};\n\nexport function init() {\n\tif ( isExperimentActive( 'editor_mcp' ) ) {\n\t\treturn getSDK().waitForReady();\n\t}\n\treturn Promise.resolve();\n}\n\nexport function startMCPServer() {\n\tif ( isExperimentActive( 'editor_mcp' ) ) {\n\t\treturn getSDK()\n\t\t\t.waitForReady()\n\t\t\t.then( () => activateMcpRegistration( sdk ) );\n\t}\n\treturn Promise.resolve();\n}\n\ndocument.addEventListener(\n\t'DOMContentLoaded',\n\t() => {\n\t\tstartMCPServer();\n\t},\n\t{\n\t\tonce: true,\n\t}\n);\n","import { type z, type ZodRawShape, type ZodTypeAny } from '@elementor/schema';\nimport { type AngieMcpSdk } from '@elementor-external/angie-sdk';\nimport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nimport { mockMcpRegistry } from './test-utils/mock-mcp-registry';\n\nconst mcpRegistry: { [ namespace: string ]: McpServer } = {};\nconst mcpDescriptions: { [ namespace: string ]: string } = {};\n// @ts-ignore - QUnit fails this\nlet isMcpRegistrationActivated = false || typeof globalThis.jest !== 'undefined';\n\nexport const registerMcp = ( mcp: McpServer, name: string ) => {\n\tif ( isMcpRegistrationActivated ) {\n\t\tthrow new Error( 'MCP Registration is already activated. Cannot register new MCP servers.' );\n\t}\n\tconst mcpName = isAlphabet( name );\n\tmcpRegistry[ mcpName ] = mcp;\n};\n\nexport async function activateMcpRegistration( sdk: AngieMcpSdk ) {\n\tif ( isMcpRegistrationActivated ) {\n\t\treturn;\n\t}\n\tisMcpRegistrationActivated = true;\n\tconst mcpServerList = Object.entries( mcpRegistry );\n\tfor await ( const entry of mcpServerList ) {\n\t\tconst [ key, mcpServer ] = entry;\n\t\tawait sdk.registerServer( {\n\t\t\tname: `editor-${ key }`,\n\t\t\tserver: mcpServer,\n\t\t\tversion: '1.0.0',\n\t\t\tdescription: mcpDescriptions[ key ] || key,\n\t\t} );\n\t}\n}\n\nconst isAlphabet = ( str: string ): string | never => {\n\tconst passes = !! str && /^[a-z]+$/.test( str );\n\tif ( ! passes ) {\n\t\tthrow new Error( 'Not alphabet' );\n\t}\n\treturn str;\n};\n\n/**\n *\n * @param namespace The namespace of the MCP server. It should contain only lowercase alphabetic characters.\n */\nexport const getMCPByDomain = ( namespace: string ): MCPRegistryEntry => {\n\tconst mcpName = `editor-${ isAlphabet( namespace ) }`;\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn mockMcpRegistry();\n\t}\n\tif ( ! mcpRegistry[ namespace ] ) {\n\t\tmcpRegistry[ namespace ] = new McpServer( {\n\t\t\tname: mcpName,\n\t\t\tversion: '1.0.0',\n\t\t} );\n\t}\n\tconst mcpServer = mcpRegistry[ namespace ];\n\tconst { addTool } = createToolRegistrator( mcpServer );\n\treturn {\n\t\taddTool,\n\t\tsetMCPDescription: ( description: string ) => {\n\t\t\tmcpDescriptions[ namespace ] = description;\n\t\t},\n\t};\n};\n\nexport interface MCPRegistryEntry {\n\taddTool: < T extends undefined | ZodRawShape = undefined, O extends undefined | ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) => void;\n\tsetMCPDescription: ( description: string ) => void;\n}\n\ntype ToolRegistrationOptions<\n\tInputArgs extends undefined | ZodRawShape = undefined,\n\tOutputSchema extends undefined | ZodRawShape = undefined,\n\tExpectedOutput = OutputSchema extends ZodRawShape ? z.objectOutputType< OutputSchema, ZodTypeAny > : string,\n> = {\n\tname: string;\n\tdescription: string;\n\tschema?: InputArgs;\n\toutputSchema?: OutputSchema;\n\thandler: InputArgs extends ZodRawShape\n\t\t? (\n\t\t\t\targs: z.objectOutputType< InputArgs, ZodTypeAny >,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >\n\t\t: (\n\t\t\t\targs: unknown,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >;\n\tisDestrcutive?: boolean;\n};\n\nfunction createToolRegistrator( server: McpServer ) {\n\tfunction addTool< T extends undefined | ZodRawShape = undefined, O extends undefined | ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) {\n\t\tconst inputSchema: ZodRawShape = opts.schema ? opts.schema : {};\n\t\tif ( isMcpRegistrationActivated ) {\n\t\t\tthrow new Error( 'MCP Registration is already activated. Cannot add new tools.' );\n\t\t}\n\t\tconst toolCallback: ToolCallback< typeof inputSchema > = async function ( args, extra ) {\n\t\t\ttry {\n\t\t\t\tconst invocationResult = await opts.handler( opts.schema ? args : {}, extra );\n\t\t\t\treturn {\n\t\t\t\t\tstructuredContent: typeof invocationResult === 'string' ? undefined : invocationResult,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\t\ttypeof invocationResult === 'string'\n\t\t\t\t\t\t\t\t\t? invocationResult\n\t\t\t\t\t\t\t\t\t: JSON.stringify( invocationResult ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t} catch ( error ) {\n\t\t\t\treturn {\n\t\t\t\t\tisError: true,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tserver.registerTool(\n\t\t\topts.name,\n\t\t\t{\n\t\t\t\tdescription: opts.description,\n\t\t\t\tinputSchema,\n\t\t\t\toutputSchema: opts.outputSchema,\n\t\t\t\ttitle: opts.name,\n\t\t\t\tannotations: {\n\t\t\t\t\tdestructiveHint: opts.isDestrcutive,\n\t\t\t\t\treadOnlyHint: opts.isDestrcutive ? false : undefined,\n\t\t\t\t\ttitle: opts.name,\n\t\t\t\t},\n\t\t\t},\n\t\t\ttoolCallback\n\t\t);\n\t}\n\treturn {\n\t\taddTool,\n\t};\n}\n","import { type MCPRegistryEntry } from '../mcp-registry';\n\nexport const mockMcpRegistry = (): MCPRegistryEntry => {\n\treturn {\n\t\taddTool: () => {},\n\t\tsetMCPDescription: () => {},\n\t};\n};\n"],"mappings":"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","names":["sdk","import_mcp"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/mcp-registry.ts","../src/test-utils/mock-mcp-registry.ts"],"sourcesContent":["import { getSDK } from './init';\n\nexport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nexport { init } from './init';\nexport * from './mcp-registry';\nexport const getAngieSdk = () => getSDK();\n","import { isExperimentActive } from '@elementor/editor-v1-adapters';\nimport { AngieMcpSdk } from '@elementor-external/angie-sdk';\n\nimport { activateMcpRegistration } from './mcp-registry';\n\nlet sdk: AngieMcpSdk;\n\nexport const getSDK = () => {\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn {} as unknown as AngieMcpSdk;\n\t}\n\tif ( ! sdk ) {\n\t\tsdk = new AngieMcpSdk();\n\t}\n\treturn sdk;\n};\n\nexport function init() {\n\tif ( isExperimentActive( 'editor_mcp' ) ) {\n\t\treturn getSDK().waitForReady();\n\t}\n\treturn Promise.resolve();\n}\n\nexport function startMCPServer() {\n\tif ( isExperimentActive( 'editor_mcp' ) ) {\n\t\treturn getSDK()\n\t\t\t.waitForReady()\n\t\t\t.then( () => activateMcpRegistration( sdk ) );\n\t}\n\treturn Promise.resolve();\n}\n\ndocument.addEventListener(\n\t'DOMContentLoaded',\n\t() => {\n\t\tstartMCPServer();\n\t},\n\t{\n\t\tonce: true,\n\t}\n);\n","import { type z, type ZodRawShape, type ZodTypeAny } from '@elementor/schema';\nimport { type AngieMcpSdk } from '@elementor-external/angie-sdk';\nimport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nimport { mockMcpRegistry } from './test-utils/mock-mcp-registry';\n\nconst mcpRegistry: { [ namespace: string ]: McpServer } = {};\nconst mcpDescriptions: { [ namespace: string ]: string } = {};\n// @ts-ignore - QUnit fails this\nlet isMcpRegistrationActivated = false || typeof globalThis.jest !== 'undefined';\n\nexport const registerMcp = ( mcp: McpServer, name: string ) => {\n\tif ( isMcpRegistrationActivated ) {\n\t\tthrow new Error( 'MCP Registration is already activated. Cannot register new MCP servers.' );\n\t}\n\tconst mcpName = isAlphabet( name );\n\tmcpRegistry[ mcpName ] = mcp;\n};\n\nexport async function activateMcpRegistration( sdk: AngieMcpSdk ) {\n\tif ( isMcpRegistrationActivated ) {\n\t\treturn;\n\t}\n\tisMcpRegistrationActivated = true;\n\tconst mcpServerList = Object.entries( mcpRegistry );\n\tfor await ( const entry of mcpServerList ) {\n\t\tconst [ key, mcpServer ] = entry;\n\t\tawait sdk.registerServer( {\n\t\t\tname: `editor-${ key }`,\n\t\t\tserver: mcpServer,\n\t\t\tversion: '1.0.0',\n\t\t\tdescription: mcpDescriptions[ key ] || key,\n\t\t} );\n\t}\n}\n\nconst isAlphabet = ( str: string ): string | never => {\n\tconst passes = !! str && /^[a-z_]+$/.test( str );\n\tif ( ! passes ) {\n\t\tthrow new Error( 'Not alphabet' );\n\t}\n\treturn str;\n};\n\n/**\n *\n * @param namespace The namespace of the MCP server. It should contain only lowercase alphabetic characters.\n */\nexport const getMCPByDomain = ( namespace: string ): MCPRegistryEntry => {\n\tconst mcpName = `editor-${ isAlphabet( namespace ) }`;\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn mockMcpRegistry();\n\t}\n\tif ( ! mcpRegistry[ namespace ] ) {\n\t\tmcpRegistry[ namespace ] = new McpServer( {\n\t\t\tname: mcpName,\n\t\t\tversion: '1.0.0',\n\t\t} );\n\t}\n\tconst mcpServer = mcpRegistry[ namespace ];\n\tconst { addTool } = createToolRegistrator( mcpServer );\n\treturn {\n\t\taddTool,\n\t\tsetMCPDescription: ( description: string ) => {\n\t\t\tmcpDescriptions[ namespace ] = description;\n\t\t},\n\t};\n};\n\nexport interface MCPRegistryEntry {\n\taddTool: < T extends undefined | ZodRawShape = undefined, O extends undefined | ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) => void;\n\tsetMCPDescription: ( description: string ) => void;\n}\n\ntype ToolRegistrationOptions<\n\tInputArgs extends undefined | ZodRawShape = undefined,\n\tOutputSchema extends undefined | ZodRawShape = undefined,\n\tExpectedOutput = OutputSchema extends ZodRawShape ? z.objectOutputType< OutputSchema, ZodTypeAny > : string,\n> = {\n\tname: string;\n\tdescription: string;\n\tschema?: InputArgs;\n\toutputSchema?: OutputSchema;\n\thandler: InputArgs extends ZodRawShape\n\t\t? (\n\t\t\t\targs: z.objectOutputType< InputArgs, ZodTypeAny >,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >\n\t\t: (\n\t\t\t\targs: unknown,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >;\n\tisDestrcutive?: boolean;\n};\n\nfunction createToolRegistrator( server: McpServer ) {\n\tfunction addTool< T extends undefined | ZodRawShape = undefined, O extends undefined | ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) {\n\t\tconst inputSchema: ZodRawShape = opts.schema ? opts.schema : {};\n\t\tif ( isMcpRegistrationActivated ) {\n\t\t\tthrow new Error( 'MCP Registration is already activated. Cannot add new tools.' );\n\t\t}\n\t\tconst toolCallback: ToolCallback< typeof inputSchema > = async function ( args, extra ) {\n\t\t\ttry {\n\t\t\t\tconst invocationResult = await opts.handler( opts.schema ? args : {}, extra );\n\t\t\t\treturn {\n\t\t\t\t\tstructuredContent: typeof invocationResult === 'string' ? undefined : invocationResult,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\t\ttypeof invocationResult === 'string'\n\t\t\t\t\t\t\t\t\t? invocationResult\n\t\t\t\t\t\t\t\t\t: JSON.stringify( invocationResult ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t} catch ( error ) {\n\t\t\t\treturn {\n\t\t\t\t\tisError: true,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tserver.registerTool(\n\t\t\topts.name,\n\t\t\t{\n\t\t\t\tdescription: opts.description,\n\t\t\t\tinputSchema,\n\t\t\t\toutputSchema: opts.outputSchema,\n\t\t\t\ttitle: opts.name,\n\t\t\t\tannotations: {\n\t\t\t\t\tdestructiveHint: opts.isDestrcutive,\n\t\t\t\t\treadOnlyHint: opts.isDestrcutive ? false : undefined,\n\t\t\t\t\ttitle: opts.name,\n\t\t\t\t},\n\t\t\t},\n\t\t\ttoolCallback\n\t\t);\n\t}\n\treturn {\n\t\taddTool,\n\t};\n}\n","import { type MCPRegistryEntry } from '../mcp-registry';\n\nexport const mockMcpRegistry = (): MCPRegistryEntry => {\n\treturn {\n\t\taddTool: () => {},\n\t\tsetMCPDescription: () => {},\n\t};\n};\n"],"mappings":"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","names":["sdk","import_mcp"]}
package/dist/index.mjs CHANGED
@@ -43,7 +43,7 @@ async function activateMcpRegistration(sdk2) {
43
43
  }
44
44
  }
45
45
  var isAlphabet = (str) => {
46
- const passes = !!str && /^[a-z]+$/.test(str);
46
+ const passes = !!str && /^[a-z_]+$/.test(str);
47
47
  if (!passes) {
48
48
  throw new Error("Not alphabet");
49
49
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/init.ts","../src/mcp-registry.ts","../src/test-utils/mock-mcp-registry.ts","../src/index.ts"],"sourcesContent":["import { isExperimentActive } from '@elementor/editor-v1-adapters';\nimport { AngieMcpSdk } from '@elementor-external/angie-sdk';\n\nimport { activateMcpRegistration } from './mcp-registry';\n\nlet sdk: AngieMcpSdk;\n\nexport const getSDK = () => {\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn {} as unknown as AngieMcpSdk;\n\t}\n\tif ( ! sdk ) {\n\t\tsdk = new AngieMcpSdk();\n\t}\n\treturn sdk;\n};\n\nexport function init() {\n\tif ( isExperimentActive( 'editor_mcp' ) ) {\n\t\treturn getSDK().waitForReady();\n\t}\n\treturn Promise.resolve();\n}\n\nexport function startMCPServer() {\n\tif ( isExperimentActive( 'editor_mcp' ) ) {\n\t\treturn getSDK()\n\t\t\t.waitForReady()\n\t\t\t.then( () => activateMcpRegistration( sdk ) );\n\t}\n\treturn Promise.resolve();\n}\n\ndocument.addEventListener(\n\t'DOMContentLoaded',\n\t() => {\n\t\tstartMCPServer();\n\t},\n\t{\n\t\tonce: true,\n\t}\n);\n","import { type z, type ZodRawShape, type ZodTypeAny } from '@elementor/schema';\nimport { type AngieMcpSdk } from '@elementor-external/angie-sdk';\nimport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nimport { mockMcpRegistry } from './test-utils/mock-mcp-registry';\n\nconst mcpRegistry: { [ namespace: string ]: McpServer } = {};\nconst mcpDescriptions: { [ namespace: string ]: string } = {};\n// @ts-ignore - QUnit fails this\nlet isMcpRegistrationActivated = false || typeof globalThis.jest !== 'undefined';\n\nexport const registerMcp = ( mcp: McpServer, name: string ) => {\n\tif ( isMcpRegistrationActivated ) {\n\t\tthrow new Error( 'MCP Registration is already activated. Cannot register new MCP servers.' );\n\t}\n\tconst mcpName = isAlphabet( name );\n\tmcpRegistry[ mcpName ] = mcp;\n};\n\nexport async function activateMcpRegistration( sdk: AngieMcpSdk ) {\n\tif ( isMcpRegistrationActivated ) {\n\t\treturn;\n\t}\n\tisMcpRegistrationActivated = true;\n\tconst mcpServerList = Object.entries( mcpRegistry );\n\tfor await ( const entry of mcpServerList ) {\n\t\tconst [ key, mcpServer ] = entry;\n\t\tawait sdk.registerServer( {\n\t\t\tname: `editor-${ key }`,\n\t\t\tserver: mcpServer,\n\t\t\tversion: '1.0.0',\n\t\t\tdescription: mcpDescriptions[ key ] || key,\n\t\t} );\n\t}\n}\n\nconst isAlphabet = ( str: string ): string | never => {\n\tconst passes = !! str && /^[a-z]+$/.test( str );\n\tif ( ! passes ) {\n\t\tthrow new Error( 'Not alphabet' );\n\t}\n\treturn str;\n};\n\n/**\n *\n * @param namespace The namespace of the MCP server. It should contain only lowercase alphabetic characters.\n */\nexport const getMCPByDomain = ( namespace: string ): MCPRegistryEntry => {\n\tconst mcpName = `editor-${ isAlphabet( namespace ) }`;\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn mockMcpRegistry();\n\t}\n\tif ( ! mcpRegistry[ namespace ] ) {\n\t\tmcpRegistry[ namespace ] = new McpServer( {\n\t\t\tname: mcpName,\n\t\t\tversion: '1.0.0',\n\t\t} );\n\t}\n\tconst mcpServer = mcpRegistry[ namespace ];\n\tconst { addTool } = createToolRegistrator( mcpServer );\n\treturn {\n\t\taddTool,\n\t\tsetMCPDescription: ( description: string ) => {\n\t\t\tmcpDescriptions[ namespace ] = description;\n\t\t},\n\t};\n};\n\nexport interface MCPRegistryEntry {\n\taddTool: < T extends undefined | ZodRawShape = undefined, O extends undefined | ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) => void;\n\tsetMCPDescription: ( description: string ) => void;\n}\n\ntype ToolRegistrationOptions<\n\tInputArgs extends undefined | ZodRawShape = undefined,\n\tOutputSchema extends undefined | ZodRawShape = undefined,\n\tExpectedOutput = OutputSchema extends ZodRawShape ? z.objectOutputType< OutputSchema, ZodTypeAny > : string,\n> = {\n\tname: string;\n\tdescription: string;\n\tschema?: InputArgs;\n\toutputSchema?: OutputSchema;\n\thandler: InputArgs extends ZodRawShape\n\t\t? (\n\t\t\t\targs: z.objectOutputType< InputArgs, ZodTypeAny >,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >\n\t\t: (\n\t\t\t\targs: unknown,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >;\n\tisDestrcutive?: boolean;\n};\n\nfunction createToolRegistrator( server: McpServer ) {\n\tfunction addTool< T extends undefined | ZodRawShape = undefined, O extends undefined | ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) {\n\t\tconst inputSchema: ZodRawShape = opts.schema ? opts.schema : {};\n\t\tif ( isMcpRegistrationActivated ) {\n\t\t\tthrow new Error( 'MCP Registration is already activated. Cannot add new tools.' );\n\t\t}\n\t\tconst toolCallback: ToolCallback< typeof inputSchema > = async function ( args, extra ) {\n\t\t\ttry {\n\t\t\t\tconst invocationResult = await opts.handler( opts.schema ? args : {}, extra );\n\t\t\t\treturn {\n\t\t\t\t\tstructuredContent: typeof invocationResult === 'string' ? undefined : invocationResult,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\t\ttypeof invocationResult === 'string'\n\t\t\t\t\t\t\t\t\t? invocationResult\n\t\t\t\t\t\t\t\t\t: JSON.stringify( invocationResult ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t} catch ( error ) {\n\t\t\t\treturn {\n\t\t\t\t\tisError: true,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tserver.registerTool(\n\t\t\topts.name,\n\t\t\t{\n\t\t\t\tdescription: opts.description,\n\t\t\t\tinputSchema,\n\t\t\t\toutputSchema: opts.outputSchema,\n\t\t\t\ttitle: opts.name,\n\t\t\t\tannotations: {\n\t\t\t\t\tdestructiveHint: opts.isDestrcutive,\n\t\t\t\t\treadOnlyHint: opts.isDestrcutive ? false : undefined,\n\t\t\t\t\ttitle: opts.name,\n\t\t\t\t},\n\t\t\t},\n\t\t\ttoolCallback\n\t\t);\n\t}\n\treturn {\n\t\taddTool,\n\t};\n}\n","import { type MCPRegistryEntry } from '../mcp-registry';\n\nexport const mockMcpRegistry = (): MCPRegistryEntry => {\n\treturn {\n\t\taddTool: () => {},\n\t\tsetMCPDescription: () => {},\n\t};\n};\n","import { getSDK } from './init';\n\nexport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nexport { init } from './init';\nexport * from './mcp-registry';\nexport const getAngieSdk = () => getSDK();\n"],"mappings":"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","names":["sdk","McpServer"]}
1
+ {"version":3,"sources":["../src/init.ts","../src/mcp-registry.ts","../src/test-utils/mock-mcp-registry.ts","../src/index.ts"],"sourcesContent":["import { isExperimentActive } from '@elementor/editor-v1-adapters';\nimport { AngieMcpSdk } from '@elementor-external/angie-sdk';\n\nimport { activateMcpRegistration } from './mcp-registry';\n\nlet sdk: AngieMcpSdk;\n\nexport const getSDK = () => {\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn {} as unknown as AngieMcpSdk;\n\t}\n\tif ( ! sdk ) {\n\t\tsdk = new AngieMcpSdk();\n\t}\n\treturn sdk;\n};\n\nexport function init() {\n\tif ( isExperimentActive( 'editor_mcp' ) ) {\n\t\treturn getSDK().waitForReady();\n\t}\n\treturn Promise.resolve();\n}\n\nexport function startMCPServer() {\n\tif ( isExperimentActive( 'editor_mcp' ) ) {\n\t\treturn getSDK()\n\t\t\t.waitForReady()\n\t\t\t.then( () => activateMcpRegistration( sdk ) );\n\t}\n\treturn Promise.resolve();\n}\n\ndocument.addEventListener(\n\t'DOMContentLoaded',\n\t() => {\n\t\tstartMCPServer();\n\t},\n\t{\n\t\tonce: true,\n\t}\n);\n","import { type z, type ZodRawShape, type ZodTypeAny } from '@elementor/schema';\nimport { type AngieMcpSdk } from '@elementor-external/angie-sdk';\nimport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nimport { mockMcpRegistry } from './test-utils/mock-mcp-registry';\n\nconst mcpRegistry: { [ namespace: string ]: McpServer } = {};\nconst mcpDescriptions: { [ namespace: string ]: string } = {};\n// @ts-ignore - QUnit fails this\nlet isMcpRegistrationActivated = false || typeof globalThis.jest !== 'undefined';\n\nexport const registerMcp = ( mcp: McpServer, name: string ) => {\n\tif ( isMcpRegistrationActivated ) {\n\t\tthrow new Error( 'MCP Registration is already activated. Cannot register new MCP servers.' );\n\t}\n\tconst mcpName = isAlphabet( name );\n\tmcpRegistry[ mcpName ] = mcp;\n};\n\nexport async function activateMcpRegistration( sdk: AngieMcpSdk ) {\n\tif ( isMcpRegistrationActivated ) {\n\t\treturn;\n\t}\n\tisMcpRegistrationActivated = true;\n\tconst mcpServerList = Object.entries( mcpRegistry );\n\tfor await ( const entry of mcpServerList ) {\n\t\tconst [ key, mcpServer ] = entry;\n\t\tawait sdk.registerServer( {\n\t\t\tname: `editor-${ key }`,\n\t\t\tserver: mcpServer,\n\t\t\tversion: '1.0.0',\n\t\t\tdescription: mcpDescriptions[ key ] || key,\n\t\t} );\n\t}\n}\n\nconst isAlphabet = ( str: string ): string | never => {\n\tconst passes = !! str && /^[a-z_]+$/.test( str );\n\tif ( ! passes ) {\n\t\tthrow new Error( 'Not alphabet' );\n\t}\n\treturn str;\n};\n\n/**\n *\n * @param namespace The namespace of the MCP server. It should contain only lowercase alphabetic characters.\n */\nexport const getMCPByDomain = ( namespace: string ): MCPRegistryEntry => {\n\tconst mcpName = `editor-${ isAlphabet( namespace ) }`;\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn mockMcpRegistry();\n\t}\n\tif ( ! mcpRegistry[ namespace ] ) {\n\t\tmcpRegistry[ namespace ] = new McpServer( {\n\t\t\tname: mcpName,\n\t\t\tversion: '1.0.0',\n\t\t} );\n\t}\n\tconst mcpServer = mcpRegistry[ namespace ];\n\tconst { addTool } = createToolRegistrator( mcpServer );\n\treturn {\n\t\taddTool,\n\t\tsetMCPDescription: ( description: string ) => {\n\t\t\tmcpDescriptions[ namespace ] = description;\n\t\t},\n\t};\n};\n\nexport interface MCPRegistryEntry {\n\taddTool: < T extends undefined | ZodRawShape = undefined, O extends undefined | ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) => void;\n\tsetMCPDescription: ( description: string ) => void;\n}\n\ntype ToolRegistrationOptions<\n\tInputArgs extends undefined | ZodRawShape = undefined,\n\tOutputSchema extends undefined | ZodRawShape = undefined,\n\tExpectedOutput = OutputSchema extends ZodRawShape ? z.objectOutputType< OutputSchema, ZodTypeAny > : string,\n> = {\n\tname: string;\n\tdescription: string;\n\tschema?: InputArgs;\n\toutputSchema?: OutputSchema;\n\thandler: InputArgs extends ZodRawShape\n\t\t? (\n\t\t\t\targs: z.objectOutputType< InputArgs, ZodTypeAny >,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >\n\t\t: (\n\t\t\t\targs: unknown,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >;\n\tisDestrcutive?: boolean;\n};\n\nfunction createToolRegistrator( server: McpServer ) {\n\tfunction addTool< T extends undefined | ZodRawShape = undefined, O extends undefined | ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) {\n\t\tconst inputSchema: ZodRawShape = opts.schema ? opts.schema : {};\n\t\tif ( isMcpRegistrationActivated ) {\n\t\t\tthrow new Error( 'MCP Registration is already activated. Cannot add new tools.' );\n\t\t}\n\t\tconst toolCallback: ToolCallback< typeof inputSchema > = async function ( args, extra ) {\n\t\t\ttry {\n\t\t\t\tconst invocationResult = await opts.handler( opts.schema ? args : {}, extra );\n\t\t\t\treturn {\n\t\t\t\t\tstructuredContent: typeof invocationResult === 'string' ? undefined : invocationResult,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\t\ttypeof invocationResult === 'string'\n\t\t\t\t\t\t\t\t\t? invocationResult\n\t\t\t\t\t\t\t\t\t: JSON.stringify( invocationResult ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t} catch ( error ) {\n\t\t\t\treturn {\n\t\t\t\t\tisError: true,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tserver.registerTool(\n\t\t\topts.name,\n\t\t\t{\n\t\t\t\tdescription: opts.description,\n\t\t\t\tinputSchema,\n\t\t\t\toutputSchema: opts.outputSchema,\n\t\t\t\ttitle: opts.name,\n\t\t\t\tannotations: {\n\t\t\t\t\tdestructiveHint: opts.isDestrcutive,\n\t\t\t\t\treadOnlyHint: opts.isDestrcutive ? false : undefined,\n\t\t\t\t\ttitle: opts.name,\n\t\t\t\t},\n\t\t\t},\n\t\t\ttoolCallback\n\t\t);\n\t}\n\treturn {\n\t\taddTool,\n\t};\n}\n","import { type MCPRegistryEntry } from '../mcp-registry';\n\nexport const mockMcpRegistry = (): MCPRegistryEntry => {\n\treturn {\n\t\taddTool: () => {},\n\t\tsetMCPDescription: () => {},\n\t};\n};\n","import { getSDK } from './init';\n\nexport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nexport { init } from './init';\nexport * from './mcp-registry';\nexport const getAngieSdk = () => getSDK();\n"],"mappings":"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","names":["sdk","McpServer"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/editor-mcp",
3
- "version": "3.33.0-172",
3
+ "version": "3.33.0-174",
4
4
  "private": false,
5
5
  "author": "Elementor Team",
6
6
  "homepage": "https://elementor.com/",
@@ -43,9 +43,9 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@elementor-external/angie-sdk": "npm:@elementor/angie-sdk@1.0.1",
46
- "@elementor/schema": "3.33.0-172",
46
+ "@elementor/schema": "3.33.0-174",
47
47
  "@modelcontextprotocol/sdk": "1.17.3",
48
- "@elementor/store": "3.33.0-172",
49
- "@elementor/editor-v1-adapters": "3.33.0-172"
48
+ "@elementor/store": "3.33.0-174",
49
+ "@elementor/editor-v1-adapters": "3.33.0-174"
50
50
  }
51
51
  }
@@ -37,7 +37,7 @@ export async function activateMcpRegistration( sdk: AngieMcpSdk ) {
37
37
  }
38
38
 
39
39
  const isAlphabet = ( str: string ): string | never => {
40
- const passes = !! str && /^[a-z]+$/.test( str );
40
+ const passes = !! str && /^[a-z_]+$/.test( str );
41
41
  if ( ! passes ) {
42
42
  throw new Error( 'Not alphabet' );
43
43
  }