@node-i3x/mcp 0.0.0-stage → 0.11.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/similarity.ts","../src/bindings/rest-binding.ts","../src/server.ts","../src/tools/connect.ts","../src/tools/discover-types.ts","../src/tools/explore-hierarchy.ts","../src/tools/inspect-asset.ts","../src/tools/monitor-events.ts","../src/tools/query-telemetry.ts","../src/cli.ts"],"sourcesContent":["/**\n * Computes a normalized similarity score between two strings (0.0 to 1.0)\n * using Levenshtein edit distance and substring matching.\n */\nexport function computeSimilarity(a: string, b: string): number {\n const s1 = a.toLowerCase().trim();\n const s2 = b.toLowerCase().trim();\n\n if (s1 === s2) return 1.0;\n if (!s1 || !s2) return 0.0;\n\n // Exact substring boost\n if (s1.includes(s2) || s2.includes(s1)) {\n const ratio = Math.min(s1.length, s2.length) / Math.max(s1.length, s2.length);\n return Math.max(0.7, ratio);\n }\n\n // Levenshtein distance calculation\n const m = s1.length;\n const n = s2.length;\n const dp: number[] = Array.from({ length: n + 1 }, (_, i) => i);\n\n for (let i = 1; i <= m; i++) {\n let prev = dp[0]!;\n dp[0] = i;\n for (let j = 1; j <= n; j++) {\n const temp = dp[j]!;\n const cost = s1[i - 1] === s2[j - 1] ? 0 : 1;\n dp[j] = Math.min(dp[j]! + 1, dp[j - 1]! + 1, prev + cost);\n prev = temp;\n }\n }\n\n const distance = dp[n]!;\n const maxLen = Math.max(m, n);\n return Math.max(0, 1 - distance / maxLen);\n}\n\n/**\n * Ranks candidate strings by similarity against a target query,\n * returning the top N matches with score >= minScore.\n */\nexport function rankSuggestions(\n query: string,\n candidates: string[],\n topN = 5,\n minScore = 0.4,\n): string[] {\n return candidates\n .map((candidate) => ({\n candidate,\n score: computeSimilarity(query, candidate),\n }))\n .filter((item) => item.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, topN)\n .map((item) => item.candidate);\n}\n","import type {\n CurrentValueResult,\n HistoricalValueResult,\n Namespace,\n ObjectInstanceResponse,\n ObjectType,\n RelationshipType,\n ServerInfo,\n} from '@node-i3x/core';\nimport { rankSuggestions } from '../utils/similarity.js';\nimport type { I3XClientBinding } from './types.js';\n\nexport class RestClientBinding implements I3XClientBinding {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n private readonly requestTimeoutMs: number;\n\n constructor(baseUrl = 'http://localhost:3000', token?: string, timeoutMs = 15_000) {\n let cleanUrl = baseUrl.trim().replace(/\\/+$/, '');\n if (!cleanUrl.startsWith('http://') && !cleanUrl.startsWith('https://')) {\n cleanUrl = `http://${cleanUrl}`;\n }\n this.baseUrl = cleanUrl;\n this.requestTimeoutMs = timeoutMs;\n this.headers = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n if (token) {\n this.headers.Authorization = `Bearer ${token}`;\n }\n }\n\n private async request<T>(path: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const signal = options.signal || AbortSignal.timeout(this.requestTimeoutMs);\n\n try {\n const response = await fetch(url, {\n ...options,\n signal,\n headers: {\n ...this.headers,\n ...(options.headers || {}),\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n const truncated =\n errorText.length > 300 ? `${errorText.slice(0, 300)}...` : errorText;\n throw new Error(`HTTP ${response.status} from ${path}: ${truncated}`);\n }\n\n return (await response.json()) as T;\n } catch (err) {\n if ((err as Error).name === 'TimeoutError') {\n throw new Error(\n `i3X Gateway request timed out after ${this.requestTimeoutMs}ms for ${path}`,\n );\n }\n throw err;\n }\n }\n\n async getInfo(): Promise<ServerInfo> {\n return this.request<ServerInfo>('/v1/info');\n }\n\n async getNamespaces(): Promise<Namespace[]> {\n const res = await this.request<{ namespaces: Namespace[] }>('/v1/namespaces');\n return res.namespaces || [];\n }\n\n async getObjectTypes(namespaceUri?: string): Promise<ObjectType[]> {\n const query = namespaceUri ? `?namespaceUri=${encodeURIComponent(namespaceUri)}` : '';\n const res = await this.request<{ objectTypes: ObjectType[] }>(\n `/v1/objecttypes${query}`,\n );\n return res.objectTypes || [];\n }\n\n async getRelationshipTypes(): Promise<RelationshipType[]> {\n const res = await this.request<{ relationshipTypes: RelationshipType[] }>(\n '/v1/relationshiptypes',\n );\n return res.relationshipTypes || [];\n }\n\n async getObjects(options?: {\n rootOnly?: boolean;\n typeElementId?: string;\n }): Promise<ObjectInstanceResponse[]> {\n const params = new URLSearchParams();\n if (options?.rootOnly) params.set('root', 'true');\n if (options?.typeElementId) params.set('typeElementId', options.typeElementId);\n\n const query = params.toString() ? `?${params.toString()}` : '';\n const res = await this.request<{ objects: ObjectInstanceResponse[] }>(\n `/v1/objects${query}`,\n );\n return res.objects || [];\n }\n\n async getObjectById(elementId: string): Promise<ObjectInstanceResponse | null> {\n try {\n const res = await this.request<{ objects: ObjectInstanceResponse[] }>(\n '/v1/objects/list',\n {\n method: 'POST',\n body: JSON.stringify({ elementIds: [elementId] }),\n },\n );\n if (res.objects && res.objects.length > 0) {\n return res.objects[0] ?? null;\n }\n return null;\n } catch {\n return null;\n }\n }\n\n async getRelatedObjects(\n elementId: string,\n relationshipType?: string,\n ): Promise<ObjectInstanceResponse[]> {\n try {\n const body: Record<string, unknown> = { elementId };\n if (relationshipType) body.relationshipType = relationshipType;\n\n const res = await this.request<{\n relatedObjects: Array<{ targetObject: ObjectInstanceResponse }>;\n }>('/v1/objects/related', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n return (res.relatedObjects || []).map((r) => r.targetObject);\n } catch {\n return [];\n }\n }\n\n async getObjectValues(\n elementIds: string[],\n maxDepth = 1,\n ): Promise<CurrentValueResult[]> {\n const res = await this.request<{ values: CurrentValueResult[] }>(\n '/v1/objects/value',\n {\n method: 'POST',\n body: JSON.stringify({ elementIds, maxDepth }),\n },\n );\n return res.values || [];\n }\n\n async getHistoricalValues(\n elementIds: string[],\n startTime: string,\n endTime: string,\n maxDepth = 1,\n ): Promise<HistoricalValueResult[]> {\n const res = await this.request<{ history: HistoricalValueResult[] }>(\n '/v1/objects/history',\n {\n method: 'POST',\n body: JSON.stringify({ elementIds, startTime, endTime, maxDepth }),\n },\n );\n return res.history || [];\n }\n\n async findSuggestions(unknownId: string): Promise<string[]> {\n try {\n const allObjects = await this.getObjects();\n const candidates = allObjects.map((o) => o.elementId);\n return rankSuggestions(unknownId, candidates, 5, 0.4);\n } catch {\n return [];\n }\n }\n}\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListResourcesRequestSchema,\n ListToolsRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { RestClientBinding } from './bindings/rest-binding.js';\nimport type { I3XClientBinding } from './bindings/types.js';\nimport { connectSchema, handleConnect } from './tools/connect.js';\nimport { discoverTypesSchema, handleDiscoverTypes } from './tools/discover-types.js';\nimport {\n exploreHierarchySchema,\n handleExploreHierarchy,\n} from './tools/explore-hierarchy.js';\nimport { handleInspectAsset, inspectAssetSchema } from './tools/inspect-asset.js';\nimport { handleMonitorEvents, monitorEventsSchema } from './tools/monitor-events.js';\nimport { handleQueryTelemetry, queryTelemetrySchema } from './tools/query-telemetry.js';\n\nexport class NodeI3xMcpServer {\n private readonly server: Server;\n private binding: I3XClientBinding;\n\n constructor(binding?: I3XClientBinding) {\n this.binding = binding || new RestClientBinding();\n\n this.server = new Server(\n {\n name: '@node-i3x/mcp',\n version: '0.10.0',\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n },\n );\n\n this.setupHandlers();\n }\n\n public setBinding(binding: I3XClientBinding): void {\n this.binding = binding;\n }\n\n public getBinding(): I3XClientBinding {\n return this.binding;\n }\n\n private setupHandlers() {\n // List Available MCP Tools\n this.server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [\n {\n name: 'i3x_connect',\n description:\n 'Connect or switch dynamically to a specific i3X server endpoint URL and optional Bearer token at runtime.',\n inputSchema: {\n type: 'object',\n properties: {\n serverUrl: {\n type: 'string',\n description:\n \"Target i3X Gateway REST endpoint URL (e.g. 'http://192.168.1.50:8000' or 'https://i3x-portal.sterfive.io/instance/SESSION_ID')\",\n },\n authToken: {\n type: 'string',\n description: 'Optional Bearer authentication token for secured endpoints',\n },\n verifyConnection: {\n type: 'boolean',\n description:\n 'Whether to verify connectivity by querying server /v1/info (default: true)',\n },\n },\n required: ['serverUrl'],\n },\n },\n {\n name: 'i3x_inspect_asset',\n description:\n 'Single-turn complete asset diagnostic. Returns identity, ObjectType schema, parent/child hierarchy, and live VQT telemetry in 1 call.',\n inputSchema: {\n type: 'object',\n properties: {\n elementId: {\n type: 'string',\n description:\n \"The elementId of the asset to inspect (e.g. 'Pump_101', 'Boiler_101')\",\n },\n includeValues: {\n type: 'boolean',\n description:\n 'Whether to include live VQT telemetry values (default: true)',\n },\n includeSchema: {\n type: 'boolean',\n description:\n 'Whether to include the ObjectType JSON Schema definition (default: true)',\n },\n },\n required: ['elementId'],\n },\n },\n {\n name: 'i3x_explore_plant_hierarchy',\n description:\n 'ISA-95 plant topology discovery. Traverses plant hierarchy from root assets down to child components up to maxDepth.',\n inputSchema: {\n type: 'object',\n properties: {\n rootElementId: {\n type: 'string',\n description:\n 'Optional specific root asset elementId. If omitted, explores all root assets.',\n },\n maxDepth: {\n type: 'number',\n description:\n 'Maximum depth to traverse child components (1 to 5, default: 2)',\n },\n },\n },\n },\n {\n name: 'i3x_query_telemetry',\n description:\n 'Live current VQT telemetry or historical time-series trend analysis with pre-computed statistical summaries (min, max, mean).',\n inputSchema: {\n type: 'object',\n properties: {\n elementIds: {\n type: 'array',\n items: { type: 'string' },\n description:\n \"Array of asset elementIds to query (e.g. ['Pump_101', 'Boiler_101'])\",\n },\n mode: {\n type: 'string',\n enum: ['current', 'history'],\n description:\n \"Query mode: 'current' for live VQT, 'history' for time-series trend analysis\",\n },\n startTime: {\n type: 'string',\n description:\n \"ISO 8601 or relative duration (e.g. '-2h', '-30m') for history mode\",\n },\n endTime: {\n type: 'string',\n description: 'ISO 8601 end time (defaults to now) for history mode',\n },\n aggregateStats: {\n type: 'boolean',\n description:\n 'Whether to pre-compute min/max/mean statistical summaries (default: true)',\n },\n },\n required: ['elementIds'],\n },\n },\n {\n name: 'i3x_discover_types_and_schemas',\n description:\n 'Search registered i3X ObjectTypes, RelationshipTypes, and JSON Schema field validation requirements.',\n inputSchema: {\n type: 'object',\n properties: {\n typeElementId: {\n type: 'string',\n description:\n \"Optional specific ObjectType elementId (e.g. 'BoilerType'). If omitted, lists all types.\",\n },\n namespaceUri: {\n type: 'string',\n description:\n \"Optional namespaceUri filter (e.g. 'http://sterfive.com/UA/Demo/')\",\n },\n },\n },\n },\n {\n name: 'i3x_monitor_asset_events',\n description:\n 'Create an i3X subscription stream to monitor real-time VQT value changes or threshold alert conditions.',\n inputSchema: {\n type: 'object',\n properties: {\n elementIds: {\n type: 'array',\n items: { type: 'string' },\n description: 'Array of asset elementIds to monitor',\n },\n condition: {\n type: 'string',\n description:\n \"Optional alert condition filter (e.g. 'temperature > 85 || quality != Good')\",\n },\n },\n required: ['elementIds'],\n },\n },\n ],\n }));\n\n // Handle Tool Execution\n this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: rawArgs } = request.params;\n\n try {\n let result: unknown;\n\n switch (name) {\n case 'i3x_connect': {\n const parsed = connectSchema.parse(rawArgs);\n result = await handleConnect(parsed, (newBinding) => {\n this.binding = newBinding;\n });\n break;\n }\n case 'i3x_inspect_asset': {\n const parsed = inspectAssetSchema.parse(rawArgs);\n result = await handleInspectAsset(this.binding, parsed);\n break;\n }\n case 'i3x_explore_plant_hierarchy': {\n const parsed = exploreHierarchySchema.parse(rawArgs);\n result = await handleExploreHierarchy(this.binding, parsed);\n break;\n }\n case 'i3x_query_telemetry': {\n const parsed = queryTelemetrySchema.parse(rawArgs);\n result = await handleQueryTelemetry(this.binding, parsed);\n break;\n }\n case 'i3x_discover_types_and_schemas': {\n const parsed = discoverTypesSchema.parse(rawArgs);\n result = await handleDiscoverTypes(this.binding, parsed);\n break;\n }\n case 'i3x_monitor_asset_events': {\n const parsed = monitorEventsSchema.parse(rawArgs);\n result = await handleMonitorEvents(this.binding, parsed);\n break;\n }\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n error: (err as Error).message,\n tip: \"Check parameters or use 'i3x_explore_plant_hierarchy' to list available assets.\",\n },\n null,\n 2,\n ),\n },\n ],\n isError: true,\n };\n }\n });\n\n // List Resources (i3x://info, i3x://namespaces)\n this.server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: [\n {\n uri: 'i3x://info',\n name: 'i3X Server Metadata',\n description: 'Server capabilities, spec version, and vendor information',\n mimeType: 'application/json',\n },\n {\n uri: 'i3x://namespaces',\n name: 'Registered Namespaces',\n description: 'List of registered OPC UA / i3X namespace URIs',\n mimeType: 'application/json',\n },\n ],\n }));\n\n // Read Resource\n this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n if (uri === 'i3x://info') {\n const info = await this.binding.getInfo();\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(info, null, 2),\n },\n ],\n };\n }\n\n if (uri === 'i3x://namespaces') {\n const namespaces = await this.binding.getNamespaces();\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(namespaces, null, 2),\n },\n ],\n };\n }\n\n throw new Error(`Unknown resource URI: ${uri}`);\n });\n }\n\n async startStdio() {\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n }\n}\n","import { z } from 'zod';\nimport { RestClientBinding } from '../bindings/rest-binding.js';\nimport type { I3XClientBinding } from '../bindings/types.js';\n\nexport const connectSchema = z.object({\n serverUrl: z\n .string()\n .describe(\n \"The base URL of the i3X Gateway (e.g. 'http://192.168.1.50:8000' or 'https://i3x-portal.sterfive.io/instance/SESSION_ID')\",\n ),\n authToken: z\n .string()\n .optional()\n .describe('Optional Bearer authentication token for secured endpoints'),\n verifyConnection: z\n .boolean()\n .optional()\n .default(true)\n .describe('Whether to immediately verify connectivity by querying server /v1/info'),\n});\n\nexport async function handleConnect(\n args: z.infer<typeof connectSchema>,\n onBindingSwitch: (newBinding: I3XClientBinding) => void,\n) {\n const { serverUrl, authToken, verifyConnection } = args;\n\n const newBinding = new RestClientBinding(serverUrl, authToken);\n\n let serverInfo: unknown;\n if (verifyConnection) {\n try {\n serverInfo = await newBinding.getInfo();\n } catch (err) {\n return {\n status: 'connection_failed',\n serverUrl,\n error: (err as Error).message,\n tip: 'Please check that the server URL is reachable and the authentication token (if required) is valid.',\n };\n }\n }\n\n // Switch the active binding on the MCP server\n onBindingSwitch(newBinding);\n\n return {\n status: 'connected',\n serverUrl,\n authenticated: Boolean(authToken),\n serverInfo: serverInfo || 'Connection established without verification.',\n message: `Successfully connected to ${serverUrl}. All subsequent i3X tool calls will query this endpoint.`,\n };\n}\n","import { z } from 'zod';\nimport type { I3XClientBinding } from '../bindings/types.js';\n\nexport const discoverTypesSchema = z.object({\n typeElementId: z\n .string()\n .optional()\n .describe(\n \"Optional specific ObjectType elementId (e.g. 'BoilerType'). If omitted, lists all types.\",\n ),\n namespaceUri: z\n .string()\n .optional()\n .describe(\"Optional namespaceUri filter (e.g. 'http://sterfive.com/UA/Demo/')\"),\n});\n\nexport async function handleDiscoverTypes(\n binding: I3XClientBinding,\n args: z.infer<typeof discoverTypesSchema>,\n) {\n const { typeElementId, namespaceUri } = args;\n\n const [objectTypes, relationshipTypes, namespaces] = await Promise.all([\n binding.getObjectTypes(namespaceUri),\n binding.getRelationshipTypes(),\n binding.getNamespaces(),\n ]);\n\n if (typeElementId) {\n const matched = objectTypes.find((t) => t.elementId === typeElementId);\n if (!matched) {\n return {\n error: `ObjectType '${typeElementId}' not found.`,\n availableTypes: objectTypes.map((t) => t.elementId),\n };\n }\n return {\n objectType: matched,\n };\n }\n\n return {\n namespacesCount: namespaces.length,\n namespaces,\n objectTypesCount: objectTypes.length,\n objectTypes: objectTypes.map((t) => {\n const schemaObj =\n t.schema && typeof t.schema === 'object'\n ? (t.schema as Record<string, unknown>)\n : null;\n const required =\n schemaObj && Array.isArray(schemaObj.required)\n ? (schemaObj.required as string[])\n : [];\n\n return {\n elementId: t.elementId,\n displayName: t.displayName || t.elementId,\n namespaceUri: t.namespaceUri,\n requiredProperties: required,\n };\n }),\n relationshipTypesCount: relationshipTypes.length,\n relationshipTypes,\n };\n}\n","import { z } from 'zod';\nimport type { HierarchyNode, I3XClientBinding } from '../bindings/types.js';\n\nexport const exploreHierarchySchema = z.object({\n rootElementId: z\n .string()\n .optional()\n .describe(\n 'Optional specific root asset elementId. If omitted, explores all root assets.',\n ),\n maxDepth: z\n .number()\n .optional()\n .default(2)\n .describe('Maximum depth to traverse child components (1 to 5, default: 2)'),\n});\n\nexport async function handleExploreHierarchy(\n binding: I3XClientBinding,\n args: z.infer<typeof exploreHierarchySchema>,\n) {\n const maxDepth = Math.min(Math.max(args.maxDepth || 2, 1), 5);\n\n let roots: Array<{ elementId: string; displayName?: string; typeElementId?: string }>;\n\n if (args.rootElementId) {\n const root = await binding.getObjectById(args.rootElementId);\n if (!root) {\n const suggestions = await binding.findSuggestions(args.rootElementId);\n return {\n error: `Root asset '${args.rootElementId}' not found.`,\n suggestions,\n };\n }\n roots = [root];\n } else {\n roots = await binding.getObjects({ rootOnly: true });\n }\n\n async function buildNode(\n asset: { elementId: string; displayName?: string; typeElementId?: string },\n currentDepth: number,\n visited: Set<string>,\n ): Promise<HierarchyNode> {\n const node: HierarchyNode = {\n elementId: asset.elementId,\n displayName: asset.displayName || asset.elementId,\n typeElementId: asset.typeElementId,\n };\n\n visited.add(asset.elementId);\n\n if (currentDepth < maxDepth) {\n const children = await binding.getRelatedObjects(asset.elementId);\n const unvisitedChildren = children.filter((c) => !visited.has(c.elementId));\n\n if (unvisitedChildren.length > 0) {\n node.children = await Promise.all(\n unvisitedChildren.map((child) =>\n buildNode(child, currentDepth + 1, new Set(visited)),\n ),\n );\n }\n }\n\n return node;\n }\n\n const hierarchyTree = await Promise.all(\n roots.map((root) => buildNode(root, 1, new Set<string>())),\n );\n\n return {\n totalRoots: roots.length,\n traversalDepth: maxDepth,\n plantTopology: hierarchyTree,\n };\n}\n","import { z } from 'zod';\nimport type { I3XClientBinding } from '../bindings/types.js';\n\nexport const inspectAssetSchema = z.object({\n elementId: z\n .string()\n .describe(\"The elementId of the asset to inspect (e.g. 'Pump_101', 'Boiler_101')\"),\n includeValues: z\n .boolean()\n .optional()\n .default(true)\n .describe('Whether to include live VQT (Value, Quality, Timestamp) telemetry values'),\n includeSchema: z\n .boolean()\n .optional()\n .default(true)\n .describe('Whether to include the ObjectType JSON Schema definition'),\n});\n\nexport async function handleInspectAsset(\n binding: I3XClientBinding,\n args: z.infer<typeof inspectAssetSchema>,\n) {\n const { elementId, includeValues, includeSchema } = args;\n\n const asset = await binding.getObjectById(elementId);\n if (!asset) {\n const suggestions = await binding.findSuggestions(elementId);\n return {\n error: `Asset '${elementId}' not found in i3X address space.`,\n suggestions: suggestions.length > 0 ? suggestions : 'No close matches found.',\n tip: \"Use 'i3x_explore_plant_hierarchy' to list all root industrial assets.\",\n };\n }\n\n const result: Record<string, unknown> = {\n elementId: asset.elementId,\n displayName: asset.displayName || asset.elementId,\n description: asset.metadata?.description || undefined,\n typeElementId: asset.typeElementId,\n isRoot: !asset.parentId,\n };\n\n // Run sub-components, schema, and telemetry fetches concurrently for maximum speed & fault-tolerance\n const relatedPromise = binding.getRelatedObjects(elementId);\n const schemaPromise =\n includeSchema && asset.typeElementId\n ? binding.getObjectTypes()\n : Promise.resolve(null);\n const valuesPromise = includeValues\n ? binding.getObjectValues([elementId])\n : Promise.resolve(null);\n\n const [relatedResult, schemaResult, valuesResult] = await Promise.allSettled([\n relatedPromise,\n schemaPromise,\n valuesPromise,\n ]);\n\n // Sub-components\n if (\n relatedResult.status === 'fulfilled' &&\n Array.isArray(relatedResult.value) &&\n relatedResult.value.length > 0\n ) {\n result.subComponents = relatedResult.value.map((r) => ({\n elementId: r.elementId,\n displayName: r.displayName || r.elementId,\n typeElementId: r.typeElementId,\n }));\n }\n\n // Schema definition\n if (schemaResult.status === 'fulfilled' && Array.isArray(schemaResult.value)) {\n const targetType = schemaResult.value.find(\n (t) => t.elementId === asset.typeElementId,\n );\n if (targetType) {\n result.typeDefinition = {\n elementId: targetType.elementId,\n displayName: targetType.displayName,\n schema: targetType.schema,\n };\n }\n }\n\n // Current telemetry values\n if (\n valuesResult.status === 'fulfilled' &&\n Array.isArray(valuesResult.value) &&\n valuesResult.value.length > 0\n ) {\n result.currentValues = valuesResult.value[0];\n } else if (valuesResult.status === 'rejected') {\n result.currentValuesWarning = 'Telemetry data temporarily unavailable';\n }\n\n return result;\n}\n","import { z } from 'zod';\nimport type { I3XClientBinding } from '../bindings/types.js';\n\nexport const monitorEventsSchema = z.object({\n elementIds: z\n .array(z.string())\n .min(1)\n .describe(\"Array of asset elementIds to monitor (e.g. ['Boiler_101', 'Pump_101'])\"),\n condition: z\n .string()\n .optional()\n .describe(\n \"Optional monitoring alert condition filter (e.g. 'temperature > 85 || quality != Good')\",\n ),\n});\n\nexport async function handleMonitorEvents(\n binding: I3XClientBinding,\n args: z.infer<typeof monitorEventsSchema>,\n) {\n const { elementIds, condition } = args;\n\n // Snapshot current state first\n const currentValues = await binding.getObjectValues(elementIds);\n\n return {\n status: 'monitoring_active',\n monitoredAssets: elementIds,\n alertCondition: condition || 'All value or quality changes',\n initialSnapshot: currentValues,\n instructions:\n 'Subscription stream registered. The MCP server will emit notification events on matching VQT telemetry updates or threshold breaches.',\n };\n}\n","import { z } from 'zod';\nimport type { I3XClientBinding } from '../bindings/types.js';\n\nexport const queryTelemetrySchema = z.object({\n elementIds: z\n .array(z.string())\n .min(1)\n .describe(\"Array of asset elementIds to query (e.g. ['Pump_101', 'Boiler_101'])\"),\n mode: z\n .enum(['current', 'history'])\n .optional()\n .default('current')\n .describe(\n \"Query mode: 'current' for live VQT telemetry, 'history' for time-series trend analysis\",\n ),\n startTime: z\n .string()\n .optional()\n .describe(\n \"ISO 8601 start time or relative time string (e.g. '-2h', '-30m', '-1d') for history mode\",\n ),\n endTime: z\n .string()\n .optional()\n .describe('ISO 8601 end time (defaults to now) for history mode'),\n aggregateStats: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n 'Whether to pre-compute min/max/mean statistical summaries for numeric sensor streams',\n ),\n});\n\nfunction parseStartTime(input?: string): string {\n if (!input) {\n const d = new Date();\n d.setHours(d.getHours() - 1);\n return d.toISOString();\n }\n\n const match = input.match(/^-(\\d+)([smhdw])$/i);\n if (match) {\n const amount = parseInt(match[1]!, 10);\n const unit = match[2]!.toLowerCase();\n const d = new Date();\n\n switch (unit) {\n case 's':\n d.setSeconds(d.getSeconds() - amount);\n break;\n case 'm':\n d.setMinutes(d.getMinutes() - amount);\n break;\n case 'h':\n d.setHours(d.getHours() - amount);\n break;\n case 'd':\n d.setDate(d.getDate() - amount);\n break;\n case 'w':\n d.setDate(d.getDate() - amount * 7);\n break;\n }\n return d.toISOString();\n }\n\n // Fallback to standard ISO Date parsing\n const parsed = new Date(input);\n if (Number.isNaN(parsed.getTime())) {\n const defaultDate = new Date();\n defaultDate.setHours(defaultDate.getHours() - 1);\n return defaultDate.toISOString();\n }\n\n return parsed.toISOString();\n}\n\nexport async function handleQueryTelemetry(\n binding: I3XClientBinding,\n args: z.infer<typeof queryTelemetrySchema>,\n) {\n const { elementIds, mode, aggregateStats } = args;\n\n if (mode === 'current') {\n const values = await binding.getObjectValues(elementIds);\n return {\n mode: 'current',\n telemetry: values,\n };\n }\n\n // History mode\n const startTime = parseStartTime(args.startTime);\n const endTimeDate = args.endTime ? new Date(args.endTime) : new Date();\n const endTime = Number.isNaN(endTimeDate.getTime())\n ? new Date().toISOString()\n : endTimeDate.toISOString();\n\n const history = await binding.getHistoricalValues(elementIds, startTime, endTime);\n\n if (!aggregateStats) {\n return {\n mode: 'history',\n timeRange: { startTime, endTime },\n history,\n };\n }\n\n // Calculate pre-computed statistical aggregates\n const reports = history.map((record, idx) => {\n const elementId = elementIds[idx] || `element_${idx}`;\n const report: Record<string, unknown> = {\n elementId,\n timeRange: { startTime, endTime },\n dataPoints: record.values || [],\n };\n\n const numericValues: number[] = [];\n let badQualityCount = 0;\n\n for (const v of record.values || []) {\n if (v.quality && String(v.quality).toUpperCase() !== 'GOOD') {\n badQualityCount++;\n }\n if (typeof v.value === 'number' && !Number.isNaN(v.value)) {\n numericValues.push(v.value);\n }\n }\n\n if (numericValues.length > 0) {\n const min = Math.min(...numericValues);\n const max = Math.max(...numericValues);\n const sum = numericValues.reduce((a, b) => a + b, 0);\n const mean = Math.round((sum / numericValues.length) * 100) / 100;\n\n report.statistics = {\n min,\n max,\n mean,\n count: numericValues.length,\n badQualityCount,\n };\n } else {\n report.statistics = {\n count: (record.values || []).length,\n badQualityCount,\n };\n }\n\n return report;\n });\n\n return {\n mode: 'history',\n timeRange: { startTime, endTime },\n telemetryReports: reports,\n };\n}\n","#!/usr/bin/env node\nimport { RestClientBinding } from './bindings/rest-binding.js';\nimport { NodeI3xMcpServer } from './server.js';\n\nconst args = process.argv.slice(2);\n\n// Check flags\nif (args.includes('--help') || args.includes('-h')) {\n console.error(`\nUsage: node-i3x-mcp [options]\n\nModel Context Protocol (MCP) server for industrial automation (i3X & OPC UA).\n\nOptions:\n --url <url> Target i3X Gateway REST URL (default: http://localhost:3000)\n --token <token> Optional Bearer authentication token\n --help, -h Show this help message\n --version, -v Show version number\n\nEnvironment Variables:\n I3X_SERVER_URL Target i3X Gateway REST URL (alias: I3X_BASE_URL)\n I3X_AUTH_TOKEN Optional Bearer authentication token\n`);\n process.exit(0);\n}\n\nif (args.includes('--version') || args.includes('-v')) {\n console.error('0.10.0');\n process.exit(0);\n}\n\nfunction getArgValue(flag: string): string | undefined {\n const idx = args.indexOf(flag);\n if (idx !== -1 && idx + 1 < args.length) {\n return args[idx + 1];\n }\n return undefined;\n}\n\nconst targetUrl =\n getArgValue('--url') ||\n process.env.I3X_SERVER_URL ||\n process.env.I3X_BASE_URL ||\n 'http://localhost:3000';\n\nconst authToken = getArgValue('--token') || process.env.I3X_AUTH_TOKEN;\n\nconst binding = new RestClientBinding(targetUrl, authToken);\nconst mcpServer = new NodeI3xMcpServer(binding);\n\n// Handle graceful termination\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\nmcpServer.startStdio().catch((err) => {\n console.error('Fatal error starting @node-i3x/mcp server:', err);\n process.exit(1);\n});\n"],"mappings":"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","names":["args","authToken","z","binding","args","z","binding","args","z","binding","args","z","binding","args","z","binding","args","binding"]}
@@ -0,0 +1,225 @@
1
+ import * as _node_i3x_core from '@node-i3x/core';
2
+ import { ServerInfo, Namespace, ObjectType, RelationshipType, ObjectInstanceResponse, CurrentValueResult, HistoricalValueResult, I3xStack } from '@node-i3x/core';
3
+ import { z } from 'zod';
4
+
5
+ interface AssetDiagnosticReport {
6
+ elementId: string;
7
+ displayName?: string;
8
+ description?: string;
9
+ typeElementId?: string;
10
+ typeSchema?: Record<string, unknown>;
11
+ parentId?: string;
12
+ subComponents?: Array<{
13
+ elementId: string;
14
+ displayName?: string;
15
+ relationshipType?: string;
16
+ }>;
17
+ currentValues?: Record<string, {
18
+ value: unknown;
19
+ quality: string;
20
+ timestamp: string;
21
+ }>;
22
+ diagnosticTips?: string[];
23
+ }
24
+ interface HierarchyNode {
25
+ elementId: string;
26
+ displayName?: string;
27
+ typeElementId?: string;
28
+ children?: HierarchyNode[];
29
+ }
30
+ interface TelemetrySummary {
31
+ elementId: string;
32
+ values: Array<{
33
+ timestamp: string;
34
+ value: unknown;
35
+ quality: string;
36
+ }>;
37
+ statistics?: {
38
+ min?: number;
39
+ max?: number;
40
+ mean?: number;
41
+ count: number;
42
+ badQualityCount: number;
43
+ };
44
+ }
45
+ interface I3XClientBinding {
46
+ getInfo(): Promise<ServerInfo>;
47
+ getNamespaces(): Promise<Namespace[]>;
48
+ getObjectTypes(namespaceUri?: string): Promise<ObjectType[]>;
49
+ getRelationshipTypes(): Promise<RelationshipType[]>;
50
+ getObjects(options?: {
51
+ rootOnly?: boolean;
52
+ typeElementId?: string;
53
+ }): Promise<ObjectInstanceResponse[]>;
54
+ getObjectById(elementId: string): Promise<ObjectInstanceResponse | null>;
55
+ getRelatedObjects(elementId: string, relationshipType?: string): Promise<ObjectInstanceResponse[]>;
56
+ getObjectValues(elementIds: string[], maxDepth?: number): Promise<CurrentValueResult[]>;
57
+ getHistoricalValues(elementIds: string[], startTime: string, endTime: string, maxDepth?: number): Promise<HistoricalValueResult[]>;
58
+ findSuggestions(unknownId: string): Promise<string[]>;
59
+ }
60
+
61
+ declare class InProcessConnectorBinding implements I3XClientBinding {
62
+ private readonly stack;
63
+ constructor(stack: I3xStack);
64
+ getInfo(): Promise<ServerInfo>;
65
+ getNamespaces(): Promise<Namespace[]>;
66
+ getObjectTypes(namespaceUri?: string): Promise<ObjectType[]>;
67
+ getRelationshipTypes(): Promise<RelationshipType[]>;
68
+ getObjects(options?: {
69
+ rootOnly?: boolean;
70
+ typeElementId?: string;
71
+ }): Promise<ObjectInstanceResponse[]>;
72
+ getObjectById(elementId: string): Promise<ObjectInstanceResponse | null>;
73
+ getRelatedObjects(elementId: string): Promise<ObjectInstanceResponse[]>;
74
+ getObjectValues(elementIds: string[], maxDepth?: number): Promise<CurrentValueResult[]>;
75
+ getHistoricalValues(elementIds: string[], startTime: string, endTime: string, maxDepth?: number): Promise<HistoricalValueResult[]>;
76
+ findSuggestions(unknownId: string): Promise<string[]>;
77
+ }
78
+
79
+ declare class RestClientBinding implements I3XClientBinding {
80
+ private readonly baseUrl;
81
+ private readonly headers;
82
+ private readonly requestTimeoutMs;
83
+ constructor(baseUrl?: string, token?: string, timeoutMs?: number);
84
+ private request;
85
+ getInfo(): Promise<ServerInfo>;
86
+ getNamespaces(): Promise<Namespace[]>;
87
+ getObjectTypes(namespaceUri?: string): Promise<ObjectType[]>;
88
+ getRelationshipTypes(): Promise<RelationshipType[]>;
89
+ getObjects(options?: {
90
+ rootOnly?: boolean;
91
+ typeElementId?: string;
92
+ }): Promise<ObjectInstanceResponse[]>;
93
+ getObjectById(elementId: string): Promise<ObjectInstanceResponse | null>;
94
+ getRelatedObjects(elementId: string, relationshipType?: string): Promise<ObjectInstanceResponse[]>;
95
+ getObjectValues(elementIds: string[], maxDepth?: number): Promise<CurrentValueResult[]>;
96
+ getHistoricalValues(elementIds: string[], startTime: string, endTime: string, maxDepth?: number): Promise<HistoricalValueResult[]>;
97
+ findSuggestions(unknownId: string): Promise<string[]>;
98
+ }
99
+
100
+ declare class NodeI3xMcpServer {
101
+ private readonly server;
102
+ private binding;
103
+ constructor(binding?: I3XClientBinding);
104
+ setBinding(binding: I3XClientBinding): void;
105
+ getBinding(): I3XClientBinding;
106
+ private setupHandlers;
107
+ startStdio(): Promise<void>;
108
+ }
109
+
110
+ declare const discoverTypesSchema: z.ZodObject<{
111
+ typeElementId: z.ZodOptional<z.ZodString>;
112
+ namespaceUri: z.ZodOptional<z.ZodString>;
113
+ }, z.core.$strip>;
114
+ declare function handleDiscoverTypes(binding: I3XClientBinding, args: z.infer<typeof discoverTypesSchema>): Promise<{
115
+ error: string;
116
+ availableTypes: string[];
117
+ objectType?: undefined;
118
+ namespacesCount?: undefined;
119
+ namespaces?: undefined;
120
+ objectTypesCount?: undefined;
121
+ objectTypes?: undefined;
122
+ relationshipTypesCount?: undefined;
123
+ relationshipTypes?: undefined;
124
+ } | {
125
+ objectType: _node_i3x_core.ObjectType;
126
+ error?: undefined;
127
+ availableTypes?: undefined;
128
+ namespacesCount?: undefined;
129
+ namespaces?: undefined;
130
+ objectTypesCount?: undefined;
131
+ objectTypes?: undefined;
132
+ relationshipTypesCount?: undefined;
133
+ relationshipTypes?: undefined;
134
+ } | {
135
+ namespacesCount: number;
136
+ namespaces: _node_i3x_core.Namespace[];
137
+ objectTypesCount: number;
138
+ objectTypes: {
139
+ elementId: string;
140
+ displayName: string;
141
+ namespaceUri: string;
142
+ requiredProperties: string[];
143
+ }[];
144
+ relationshipTypesCount: number;
145
+ relationshipTypes: _node_i3x_core.RelationshipType[];
146
+ error?: undefined;
147
+ availableTypes?: undefined;
148
+ objectType?: undefined;
149
+ }>;
150
+
151
+ declare const exploreHierarchySchema: z.ZodObject<{
152
+ rootElementId: z.ZodOptional<z.ZodString>;
153
+ maxDepth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
154
+ }, z.core.$strip>;
155
+ declare function handleExploreHierarchy(binding: I3XClientBinding, args: z.infer<typeof exploreHierarchySchema>): Promise<{
156
+ error: string;
157
+ suggestions: string[];
158
+ totalRoots?: undefined;
159
+ traversalDepth?: undefined;
160
+ plantTopology?: undefined;
161
+ } | {
162
+ totalRoots: number;
163
+ traversalDepth: number;
164
+ plantTopology: HierarchyNode[];
165
+ error?: undefined;
166
+ suggestions?: undefined;
167
+ }>;
168
+
169
+ declare const inspectAssetSchema: z.ZodObject<{
170
+ elementId: z.ZodString;
171
+ includeValues: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
172
+ includeSchema: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
173
+ }, z.core.$strip>;
174
+ declare function handleInspectAsset(binding: I3XClientBinding, args: z.infer<typeof inspectAssetSchema>): Promise<Record<string, unknown>>;
175
+
176
+ declare const monitorEventsSchema: z.ZodObject<{
177
+ elementIds: z.ZodArray<z.ZodString>;
178
+ condition: z.ZodOptional<z.ZodString>;
179
+ }, z.core.$strip>;
180
+ declare function handleMonitorEvents(binding: I3XClientBinding, args: z.infer<typeof monitorEventsSchema>): Promise<{
181
+ status: string;
182
+ monitoredAssets: string[];
183
+ alertCondition: string;
184
+ initialSnapshot: _node_i3x_core.CurrentValueResult[];
185
+ instructions: string;
186
+ }>;
187
+
188
+ declare const queryTelemetrySchema: z.ZodObject<{
189
+ elementIds: z.ZodArray<z.ZodString>;
190
+ mode: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
191
+ current: "current";
192
+ history: "history";
193
+ }>>>;
194
+ startTime: z.ZodOptional<z.ZodString>;
195
+ endTime: z.ZodOptional<z.ZodString>;
196
+ aggregateStats: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
197
+ }, z.core.$strip>;
198
+ declare function handleQueryTelemetry(binding: I3XClientBinding, args: z.infer<typeof queryTelemetrySchema>): Promise<{
199
+ mode: string;
200
+ telemetry: _node_i3x_core.CurrentValueResult[];
201
+ timeRange?: undefined;
202
+ history?: undefined;
203
+ telemetryReports?: undefined;
204
+ } | {
205
+ mode: string;
206
+ timeRange: {
207
+ startTime: string;
208
+ endTime: string;
209
+ };
210
+ history: _node_i3x_core.HistoricalValueResult[];
211
+ telemetry?: undefined;
212
+ telemetryReports?: undefined;
213
+ } | {
214
+ mode: string;
215
+ timeRange: {
216
+ startTime: string;
217
+ endTime: string;
218
+ };
219
+ telemetryReports: Record<string, unknown>[];
220
+ telemetry?: undefined;
221
+ history?: undefined;
222
+ }>;
223
+
224
+ export { InProcessConnectorBinding, NodeI3xMcpServer, RestClientBinding, discoverTypesSchema, exploreHierarchySchema, handleDiscoverTypes, handleExploreHierarchy, handleInspectAsset, handleMonitorEvents, handleQueryTelemetry, inspectAssetSchema, monitorEventsSchema, queryTelemetrySchema };
225
+ export type { AssetDiagnosticReport, HierarchyNode, I3XClientBinding, TelemetrySummary };