@burdenoff/mcp-libs 2026.825.2 → 2026.825.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/{chunk-YOSQUY3M.js → chunk-BSNL65PZ.js} +2 -2
  2. package/dist/{chunk-YOSQUY3M.js.map → chunk-BSNL65PZ.js.map} +1 -1
  3. package/dist/{chunk-RHWHUY5Y.js → chunk-QQYJVKJE.js} +3 -3
  4. package/dist/{chunk-RHWHUY5Y.js.map → chunk-QQYJVKJE.js.map} +1 -1
  5. package/dist/core/index.cjs.map +1 -1
  6. package/dist/core/index.js +1 -1
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/modules/adaptercloud/index.cjs.map +1 -1
  10. package/dist/modules/adaptercloud/index.js +1 -1
  11. package/dist/modules/artistrybase/index.cjs.map +1 -1
  12. package/dist/modules/artistrybase/index.js +1 -1
  13. package/dist/modules/assethandler/index.cjs.map +1 -1
  14. package/dist/modules/assethandler/index.js +1 -1
  15. package/dist/modules/atheletebridge/index.cjs.map +1 -1
  16. package/dist/modules/atheletebridge/index.js +1 -1
  17. package/dist/modules/auth/index.cjs.map +1 -1
  18. package/dist/modules/auth/index.js +3 -3
  19. package/dist/modules/billing/index.cjs.map +1 -1
  20. package/dist/modules/billing/index.js +1 -1
  21. package/dist/modules/brainyrich/index.cjs +13 -3
  22. package/dist/modules/brainyrich/index.cjs.map +1 -1
  23. package/dist/modules/brainyrich/index.js +14 -4
  24. package/dist/modules/brainyrich/index.js.map +1 -1
  25. package/dist/modules/buildmyiq/index.cjs.map +1 -1
  26. package/dist/modules/buildmyiq/index.js +1 -1
  27. package/dist/modules/channels/index.cjs.map +1 -1
  28. package/dist/modules/channels/index.js +1 -1
  29. package/dist/modules/collabkin/index.cjs.map +1 -1
  30. package/dist/modules/collabkin/index.js +1 -1
  31. package/dist/modules/comradecircle/index.cjs.map +1 -1
  32. package/dist/modules/comradecircle/index.js +1 -1
  33. package/dist/modules/conversations/index.cjs.map +1 -1
  34. package/dist/modules/conversations/index.js +1 -1
  35. package/dist/modules/coolandlovely/index.cjs.map +1 -1
  36. package/dist/modules/coolandlovely/index.js +1 -1
  37. package/dist/modules/cosmicintersection/index.cjs.map +1 -1
  38. package/dist/modules/cosmicintersection/index.js +1 -1
  39. package/dist/modules/crewfoundry/index.cjs.map +1 -1
  40. package/dist/modules/crewfoundry/index.js +1 -1
  41. package/dist/modules/devportal/index.cjs.map +1 -1
  42. package/dist/modules/devportal/index.js +1 -1
  43. package/dist/modules/ecoimpacthub/index.cjs.map +1 -1
  44. package/dist/modules/ecoimpacthub/index.js +1 -1
  45. package/dist/modules/eventfullymanaged/index.cjs.map +1 -1
  46. package/dist/modules/eventfullymanaged/index.js +1 -1
  47. package/dist/modules/export/index.cjs.map +1 -1
  48. package/dist/modules/export/index.js +1 -1
  49. package/dist/modules/files/index.cjs.map +1 -1
  50. package/dist/modules/files/index.js +1 -1
  51. package/dist/modules/ggnomad/index.cjs.map +1 -1
  52. package/dist/modules/ggnomad/index.js +1 -1
  53. package/dist/modules/govcitizenhub/index.cjs.map +1 -1
  54. package/dist/modules/govcitizenhub/index.js +1 -1
  55. package/dist/modules/groups/index.cjs.map +1 -1
  56. package/dist/modules/groups/index.js +1 -1
  57. package/dist/modules/headshotmarketing/index.cjs.map +1 -1
  58. package/dist/modules/headshotmarketing/index.js +1 -1
  59. package/dist/modules/health/index.cjs.map +1 -1
  60. package/dist/modules/health/index.js +1 -1
  61. package/dist/modules/hookmovies/index.cjs.map +1 -1
  62. package/dist/modules/hookmovies/index.js +1 -1
  63. package/dist/modules/housingvista/index.cjs.map +1 -1
  64. package/dist/modules/housingvista/index.js +1 -1
  65. package/dist/modules/integrations/index.cjs.map +1 -1
  66. package/dist/modules/integrations/index.js +1 -1
  67. package/dist/modules/intelwatchtower/index.cjs.map +1 -1
  68. package/dist/modules/intelwatchtower/index.js +1 -1
  69. package/dist/modules/kadaikodi/index.cjs.map +1 -1
  70. package/dist/modules/kadaikodi/index.js +1 -1
  71. package/dist/modules/labsofscience/index.cjs.map +1 -1
  72. package/dist/modules/labsofscience/index.js +1 -1
  73. package/dist/modules/manufacturedops/index.cjs.map +1 -1
  74. package/dist/modules/manufacturedops/index.js +1 -1
  75. package/dist/modules/movethewheels/index.cjs.map +1 -1
  76. package/dist/modules/movethewheels/index.js +1 -1
  77. package/dist/modules/mybodyshield/index.cjs.map +1 -1
  78. package/dist/modules/mybodyshield/index.js +1 -1
  79. package/dist/modules/notifications/index.cjs.map +1 -1
  80. package/dist/modules/notifications/index.js +1 -1
  81. package/dist/modules/organizations/index.cjs.map +1 -1
  82. package/dist/modules/organizations/index.js +1 -1
  83. package/dist/modules/planmagnet/index.cjs.map +1 -1
  84. package/dist/modules/planmagnet/index.js +1 -1
  85. package/dist/modules/products/index.cjs.map +1 -1
  86. package/dist/modules/products/index.js +1 -1
  87. package/dist/modules/proserviceworld/index.cjs.map +1 -1
  88. package/dist/modules/proserviceworld/index.js +1 -1
  89. package/dist/modules/rbac/index.cjs.map +1 -1
  90. package/dist/modules/rbac/index.js +1 -1
  91. package/dist/modules/sandbox/index.cjs.map +1 -1
  92. package/dist/modules/sandbox/index.js +1 -1
  93. package/dist/modules/scheduler/index.cjs.map +1 -1
  94. package/dist/modules/scheduler/index.js +1 -1
  95. package/dist/modules/security/index.cjs.map +1 -1
  96. package/dist/modules/security/index.js +1 -1
  97. package/dist/modules/semanticfed/index.cjs.map +1 -1
  98. package/dist/modules/semanticfed/index.js +1 -1
  99. package/dist/modules/store/index.cjs.map +1 -1
  100. package/dist/modules/store/index.js +1 -1
  101. package/dist/modules/subscriberbot/index.cjs.map +1 -1
  102. package/dist/modules/subscriberbot/index.js +1 -1
  103. package/dist/modules/support/index.cjs.map +1 -1
  104. package/dist/modules/support/index.js +1 -1
  105. package/dist/modules/tags/index.cjs.map +1 -1
  106. package/dist/modules/tags/index.js +1 -1
  107. package/dist/modules/technospam/index.cjs.map +1 -1
  108. package/dist/modules/technospam/index.js +1 -1
  109. package/dist/modules/theculturepost/index.cjs.map +1 -1
  110. package/dist/modules/theculturepost/index.js +1 -1
  111. package/dist/modules/theglobalfuel/index.cjs.map +1 -1
  112. package/dist/modules/theglobalfuel/index.js +1 -1
  113. package/dist/modules/timecampus/index.cjs.map +1 -1
  114. package/dist/modules/timecampus/index.js +1 -1
  115. package/dist/modules/tours/index.cjs.map +1 -1
  116. package/dist/modules/tours/index.js +1 -1
  117. package/dist/modules/vibecontrols/index.cjs.map +1 -1
  118. package/dist/modules/vibecontrols/index.js +2 -2
  119. package/dist/modules/workspaces/index.cjs.map +1 -1
  120. package/dist/modules/workspaces/index.js +1 -1
  121. package/package.json +28 -15
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/assethandler/operations.ts","../../../src/modules/assethandler/tools/shared.ts","../../../src/modules/assethandler/tools/assets.ts","../../../src/modules/assethandler/tools/service.ts","../../../src/modules/assethandler/tools/finance.ts","../../../src/modules/assethandler/tools/governance.ts","../../../src/modules/assethandler/tools/innovation.ts","../../../src/modules/assethandler/tools/analytics.ts","../../../src/modules/assethandler/resources.ts","../../../src/modules/assethandler/prompts.ts","../../../src/modules/assethandler/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n\n/**\n * Name-based hint heuristics for MCP `annotations` (readOnlyHint /\n * destructiveHint). Used by tool-governance.ts to auto-fill annotations for\n * the fleet of product modules that call `server.registerTool` directly\n * (bypassing the `registerTool()` core helper) and so never set them\n * explicitly today (BOFF-3903). Deliberately conservative — matched against\n * whole `_`-delimited segments so e.g. `timeentries_delete` and\n * `pomodoro_delete_goal` match, but a hypothetical `undeletable_check`\n * would not.\n *\n * A module can always override the inference by passing an explicit\n * `annotations` object to `registerTool()` / `server.registerTool()`.\n */\nconst DESTRUCTIVE_NAME_SEGMENT = /(?:^|_)delete(?:_|$)/i;\nconst READ_ONLY_NAME_SEGMENT = /(?:^|_)(?:list|get|search|check|read|count|stats|by_date)(?:_|$)/i;\n\n/** True when a tool name looks destructive (irreversibly deletes data) by naming convention. */\nexport function inferDestructiveHint(toolName: string): boolean {\n return DESTRUCTIVE_NAME_SEGMENT.test(toolName);\n}\n\n/**\n * True when a tool name looks read-only by naming convention. Never true for\n * a name that also looks destructive (a tool can't be both).\n */\nexport function inferReadOnlyHint(toolName: string): boolean {\n return !inferDestructiveHint(toolName) && READ_ONLY_NAME_SEGMENT.test(toolName);\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\nimport type { ToolAnnotations } from './tool-governance.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n /**\n * Explicit MCP annotations (readOnlyHint / destructiveHint / ...). Optional\n * — when omitted, `wrapServerWithToolGovernance` (applied centrally in\n * `createMcpServer`) infers them from the tool name. Set this to override\n * the inference for a tool whose name doesn't match the naming convention.\n */\n annotations?: ToolAnnotations;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n ...(metadata.annotations ? { annotations: metadata.annotations } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n | { _meta?: { progressToken?: string | number } }\n | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Centralized GraphQL operations for the AssetHandler MCP module.\n *\n * AssetHandler is the enterprise asset / ITSM / ITAM platform (future-products\n * ecosystem). Backend subgraph:\n * ~/products/wspace/assethandler/wspace-assethandler-svc/\n * (Hive service name `assethandler`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — AssetHandler inputs do NOT carry a workspaceId.\n *\n * List queries use the backend's cursor-based `AssetHandlerPaginationInput`\n * ({ cursor, limit }) — NOT {limit,offset} or {first,skip}. The schema exposes\n * only the federation noops `_serviceHealth` / `_serviceNoop`, so this module\n * deliberately registers NO health tool.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi/crewfoundry modules' operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const ASSET_FIELDS = `\n id assetNumber name description category serialNumber status condition\n locationName assignedTo tags customAttributes workspaceId createdAt updatedAt\n`;\n\nexport const SOFTWARE_ASSET_FIELDS = `\n id name vendor version licenseType seatsPurchased seatsUsed compliancePercent\n workspaceId createdAt updatedAt\n`;\n\nexport const CONFIGURATION_ITEM_FIELDS = `\n id ciNumber ciType name status environment owner attributes workspaceId\n createdAt updatedAt\n`;\n\nexport const DISCOVERY_JOB_FIELDS = `\n id name source status assetsDiscovered createdBy errorSummary startedAt\n completedAt workspaceId createdAt updatedAt\n`;\n\nexport const INCIDENT_FIELDS = `\n id title description category priority status reportedBy reportedAt resolvedAt\n slaBreached assignedTo workspaceId\n`;\n\nexport const PROBLEM_FIELDS = `\n id title description category priority status rootCause workaround\n relatedIncidents assignedTo workspaceId createdAt updatedAt\n`;\n\nexport const CHANGE_REQUEST_FIELDS = `\n id title description type status risk requestedBy assignedTo affectedAssets\n approvals scheduledStart scheduledEnd workspaceId createdAt updatedAt\n`;\n\nexport const WORK_ORDER_FIELDS = `\n id title description type status priority assetId assignedTo workspaceId\n createdAt updatedAt\n`;\n\nexport const MAINTENANCE_RECORD_FIELDS = `\n id assetId title description type status priority estimatedCost actualCost\n checklist scheduledAt completedAt workspaceId createdAt updatedAt\n`;\n\nexport const KNOWLEDGE_ARTICLE_FIELDS = `\n id title slug summary content status tags relatedAssetId relatedIncidentId\n views createdBy updatedBy publishedAt workspaceId createdAt updatedAt\n`;\n\nexport const BUDGET_FIELDS = `\n id name category department period allocated spent remaining status\n workspaceId createdAt updatedAt\n`;\n\nexport const TRANSACTION_FIELDS = `\n id type category description amount currency vendor department status\n occurredAt workspaceId\n`;\n\nexport const INVOICE_FIELDS = `\n id number vendor amount currency status issueDate dueDate items relatedPO\n workspaceId createdAt updatedAt\n`;\n\nexport const COMPLIANCE_FRAMEWORK_FIELDS = `\n id name version status score totalControls passedControls failedControls\n lastAssessment nextAssessment workspaceId createdAt updatedAt\n`;\n\nexport const SECURITY_POLICY_FIELDS = `\n id name version status category description owner applicableTo effectiveDate\n reviewDate workspaceId createdAt updatedAt\n`;\n\nexport const SECURITY_EVENT_FIELDS = `\n id title description eventType severity source resolved ipAddress userId\n occurredAt workspaceId createdAt\n`;\n\nexport const ESG_METRIC_FIELDS = `\n id category metricKey metricName value unit target trend periodStart periodEnd\n updatedBy workspaceId createdAt updatedAt\n`;\n\nexport const DIGITAL_TWIN_FIELDS = `\n id assetId fidelityLevel modelRef geometryRef properties workspaceId\n createdAt updatedAt\n`;\n\nexport const IOT_DEVICE_FIELDS = `\n id deviceId name type protocol status metadata assetId workspaceId\n createdAt updatedAt\n`;\n\nexport const AI_PREDICTION_FIELDS = `\n id assetId predictionType modelVersion score confidence recommendation status\n features generatedAt workspaceId createdAt\n`;\n\nexport const PROVENANCE_RECORD_FIELDS = `\n id assetId chainNetwork hash txHash blockNumber attestedBy attestedAt metadata\n workspaceId createdAt\n`;\n\n// ---------------------------------------------------------------------------\n// Assets\n// ---------------------------------------------------------------------------\n\nexport const GET_ASSET = `\n query AssetHandlerGetAsset($id: ID!) {\n asset(id: $id) {\n ${ASSET_FIELDS}\n }\n }\n`;\n\nexport const LIST_ASSETS = `\n query AssetHandlerListAssets($pagination: AssetHandlerPaginationInput) {\n assets(pagination: $pagination) {\n ${ASSET_FIELDS}\n }\n }\n`;\n\nexport const CREATE_ASSET = `\n mutation AssetHandlerCreateAsset($input: CreateAssetInput!) {\n createAsset(input: $input) {\n ${ASSET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Software assets\n// ---------------------------------------------------------------------------\n\nexport const LIST_SOFTWARE_ASSETS = `\n query AssetHandlerListSoftwareAssets($pagination: AssetHandlerPaginationInput) {\n softwareAssets(pagination: $pagination) {\n ${SOFTWARE_ASSET_FIELDS}\n }\n }\n`;\n\nexport const UPSERT_SOFTWARE_ASSET = `\n mutation AssetHandlerUpsertSoftwareAsset($input: UpsertSoftwareAssetInput!) {\n upsertSoftwareAsset(input: $input) {\n ${SOFTWARE_ASSET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Configuration items (CMDB)\n// ---------------------------------------------------------------------------\n\nexport const LIST_CONFIGURATION_ITEMS = `\n query AssetHandlerListConfigurationItems($pagination: AssetHandlerPaginationInput) {\n configurationItems(pagination: $pagination) {\n ${CONFIGURATION_ITEM_FIELDS}\n }\n }\n`;\n\nexport const UPSERT_CONFIGURATION_ITEM = `\n mutation AssetHandlerUpsertConfigurationItem($input: UpsertConfigurationItemInput!) {\n upsertConfigurationItem(input: $input) {\n ${CONFIGURATION_ITEM_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Discovery jobs\n// ---------------------------------------------------------------------------\n\nexport const LIST_DISCOVERY_JOBS = `\n query AssetHandlerListDiscoveryJobs($pagination: AssetHandlerPaginationInput) {\n discoveryJobs(pagination: $pagination) {\n ${DISCOVERY_JOB_FIELDS}\n }\n }\n`;\n\nexport const START_DISCOVERY_JOB = `\n mutation AssetHandlerStartDiscoveryJob($input: StartDiscoveryJobInput!) {\n startDiscoveryJob(input: $input) {\n ${DISCOVERY_JOB_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Incidents\n// ---------------------------------------------------------------------------\n\nexport const LIST_INCIDENTS = `\n query AssetHandlerListIncidents($pagination: AssetHandlerPaginationInput) {\n incidents(pagination: $pagination) {\n ${INCIDENT_FIELDS}\n }\n }\n`;\n\nexport const CREATE_INCIDENT = `\n mutation AssetHandlerCreateIncident($input: CreateIncidentInput!) {\n createIncident(input: $input) {\n ${INCIDENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Problems\n// ---------------------------------------------------------------------------\n\nexport const LIST_PROBLEMS = `\n query AssetHandlerListProblems($pagination: AssetHandlerPaginationInput) {\n problems(pagination: $pagination) {\n ${PROBLEM_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Change requests\n// ---------------------------------------------------------------------------\n\nexport const LIST_CHANGE_REQUESTS = `\n query AssetHandlerListChangeRequests($pagination: AssetHandlerPaginationInput) {\n changeRequests(pagination: $pagination) {\n ${CHANGE_REQUEST_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Work orders\n// ---------------------------------------------------------------------------\n\nexport const LIST_WORK_ORDERS = `\n query AssetHandlerListWorkOrders($pagination: AssetHandlerPaginationInput) {\n workOrders(pagination: $pagination) {\n ${WORK_ORDER_FIELDS}\n }\n }\n`;\n\nexport const CREATE_WORK_ORDER = `\n mutation AssetHandlerCreateWorkOrder($input: CreateWorkOrderInput!) {\n createWorkOrder(input: $input) {\n ${WORK_ORDER_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Maintenance records\n// ---------------------------------------------------------------------------\n\nexport const LIST_MAINTENANCE_RECORDS = `\n query AssetHandlerListMaintenanceRecords($pagination: AssetHandlerPaginationInput) {\n maintenanceRecords(pagination: $pagination) {\n ${MAINTENANCE_RECORD_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Knowledge articles\n// ---------------------------------------------------------------------------\n\nexport const LIST_KNOWLEDGE_ARTICLES = `\n query AssetHandlerListKnowledgeArticles($pagination: AssetHandlerPaginationInput) {\n knowledgeArticles(pagination: $pagination) {\n ${KNOWLEDGE_ARTICLE_FIELDS}\n }\n }\n`;\n\nexport const CREATE_KNOWLEDGE_ARTICLE = `\n mutation AssetHandlerCreateKnowledgeArticle($input: CreateKnowledgeArticleInput!) {\n createKnowledgeArticle(input: $input) {\n ${KNOWLEDGE_ARTICLE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Budgets\n// ---------------------------------------------------------------------------\n\nexport const LIST_BUDGETS = `\n query AssetHandlerListBudgets($pagination: AssetHandlerPaginationInput) {\n budgets(pagination: $pagination) {\n ${BUDGET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Transactions\n// ---------------------------------------------------------------------------\n\nexport const LIST_TRANSACTIONS = `\n query AssetHandlerListTransactions($pagination: AssetHandlerPaginationInput) {\n transactions(pagination: $pagination) {\n ${TRANSACTION_FIELDS}\n }\n }\n`;\n\nexport const CREATE_TRANSACTION = `\n mutation AssetHandlerCreateTransaction($input: CreateTransactionInput!) {\n createTransaction(input: $input) {\n ${TRANSACTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Invoices\n// ---------------------------------------------------------------------------\n\nexport const LIST_INVOICES = `\n query AssetHandlerListInvoices($pagination: AssetHandlerPaginationInput) {\n invoices(pagination: $pagination) {\n ${INVOICE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Compliance frameworks\n// ---------------------------------------------------------------------------\n\nexport const LIST_COMPLIANCE_FRAMEWORKS = `\n query AssetHandlerListComplianceFrameworks($pagination: AssetHandlerPaginationInput) {\n complianceFrameworks(pagination: $pagination) {\n ${COMPLIANCE_FRAMEWORK_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Security policies\n// ---------------------------------------------------------------------------\n\nexport const LIST_SECURITY_POLICIES = `\n query AssetHandlerListSecurityPolicies($pagination: AssetHandlerPaginationInput) {\n assetSecurityPolicies(pagination: $pagination) {\n ${SECURITY_POLICY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Security events\n// ---------------------------------------------------------------------------\n\nexport const LIST_SECURITY_EVENTS = `\n query AssetHandlerListSecurityEvents($pagination: AssetHandlerPaginationInput) {\n securityEvents(pagination: $pagination) {\n ${SECURITY_EVENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// ESG metrics\n// ---------------------------------------------------------------------------\n\nexport const LIST_ESG_METRICS = `\n query AssetHandlerListEsgMetrics($pagination: AssetHandlerPaginationInput) {\n esgMetrics(pagination: $pagination) {\n ${ESG_METRIC_FIELDS}\n }\n }\n`;\n\nexport const UPSERT_ESG_METRIC = `\n mutation AssetHandlerUpsertEsgMetric($input: UpsertEsgMetricInput!) {\n upsertEsgMetric(input: $input) {\n ${ESG_METRIC_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Digital twins\n// ---------------------------------------------------------------------------\n\nexport const LIST_DIGITAL_TWINS = `\n query AssetHandlerListDigitalTwins($pagination: AssetHandlerPaginationInput) {\n digitalTwins(pagination: $pagination) {\n ${DIGITAL_TWIN_FIELDS}\n }\n }\n`;\n\nexport const CREATE_DIGITAL_TWIN = `\n mutation AssetHandlerCreateDigitalTwin($input: CreateDigitalTwinInput!) {\n createDigitalTwin(input: $input) {\n ${DIGITAL_TWIN_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// IoT devices\n// ---------------------------------------------------------------------------\n\nexport const LIST_IOT_DEVICES = `\n query AssetHandlerListIotDevices($pagination: AssetHandlerPaginationInput) {\n iotDevices(pagination: $pagination) {\n ${IOT_DEVICE_FIELDS}\n }\n }\n`;\n\nexport const REGISTER_IOT_DEVICE = `\n mutation AssetHandlerRegisterIoTDevice($input: RegisterIoTDeviceInput!) {\n registerIoTDevice(input: $input) {\n ${IOT_DEVICE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// AI predictions\n// ---------------------------------------------------------------------------\n\nexport const LIST_AI_PREDICTIONS = `\n query AssetHandlerListAiPredictions($pagination: AssetHandlerPaginationInput) {\n aiPredictions(pagination: $pagination) {\n ${AI_PREDICTION_FIELDS}\n }\n }\n`;\n\nexport const REQUEST_AI_PREDICTION = `\n mutation AssetHandlerRequestAIPrediction($input: RequestAIPredictionInput!) {\n requestAIPrediction(input: $input) {\n ${AI_PREDICTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Provenance records (blockchain attestation)\n// ---------------------------------------------------------------------------\n\nexport const LIST_PROVENANCE_RECORDS = `\n query AssetHandlerListProvenanceRecords($pagination: AssetHandlerPaginationInput) {\n provenanceRecords(pagination: $pagination) {\n ${PROVENANCE_RECORD_FIELDS}\n }\n }\n`;\n\nexport const RECORD_PROVENANCE = `\n mutation AssetHandlerRecordProvenance($input: RecordProvenanceInput!) {\n recordProvenance(input: $input) {\n ${PROVENANCE_RECORD_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Dashboard\n// ---------------------------------------------------------------------------\n\nexport const DASHBOARD_OVERVIEW = `\n query AssetHandlerDashboardOverview {\n dashboardOverview {\n totalAssets\n totalTransactions\n openIncidents\n openWorkOrders\n }\n }\n`;\n","/**\n * Shared zod schemas + helpers for the AssetHandler tool surface.\n *\n * Only the backend enums that actually appear in a mutation INPUT are mirrored\n * as tight zod enums (so Claude Desktop grounds tool calls against the exact\n * allowed values). Read-only enums that never feed an input (e.g.\n * AssetBudgetStatus, ComplianceStatus, PolicyStatus, SecuritySeverity) are not\n * re-declared here — they only ever come back in responses.\n *\n * `JSONObject` scalar inputs (customAttributes, properties, metadata,\n * attributes, featureVector) are modelled as permissive object records — the\n * backend accepts arbitrary JSON, but a record shape gives the LLM a typed hint.\n *\n * All list queries page through the backend's cursor-based\n * `AssetHandlerPaginationInput` ({ cursor, limit }).\n */\n\nimport { z } from 'zod';\n\nexport const AssetConditionEnum = z\n .enum(['DAMAGED', 'EXCELLENT', 'FAIR', 'GOOD', 'POOR'])\n .describe('Physical condition of an asset');\n\nexport const AssetStatusEnum = z\n .enum(['ACTIVE', 'DISPOSED', 'INACTIVE', 'MAINTENANCE', 'RETIRED'])\n .describe('Lifecycle status of an asset');\n\nexport const PriorityEnum = z\n .enum(['CRITICAL', 'HIGH', 'LOW', 'MEDIUM'])\n .describe('Priority of an incident or work order');\n\nexport const KnowledgeArticleStatusEnum = z\n .enum(['ARCHIVED', 'DRAFT', 'PUBLISHED'])\n .describe('Publication status of a knowledge article');\n\nexport const TransactionTypeEnum = z\n .enum(['DISPOSAL', 'LEASE', 'MAINTENANCE', 'PURCHASE', 'TRANSFER'])\n .describe('Category of an asset financial transaction');\n\nexport const TransactionStatusEnum = z\n .enum(['APPROVED', 'COMPLETED', 'PENDING', 'REJECTED'])\n .describe('Approval status of a transaction');\n\nexport const WorkOrderTypeEnum = z\n .enum(['CORRECTIVE', 'EMERGENCY', 'PREDICTIVE', 'PREVENTIVE'])\n .describe('Type of maintenance work order');\n\nexport const WorkOrderStatusEnum = z\n .enum(['APPROVED', 'CANCELLED', 'COMPLETED', 'DRAFT', 'IN_PROGRESS', 'SCHEDULED'])\n .describe('Lifecycle status of a work order');\n\n/** Permissive JSON-object schema for `JSONObject` scalar inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n\n/** Cursor-based pagination args shared by every list tool. */\nexport const PaginationArgs = {\n limit: z.number().int().optional().describe('Page size (server-clamped to ≤100)'),\n cursor: z\n .string()\n .optional()\n .describe('Opaque cursor — the `id` returned from the previous page'),\n} as const;\n\n/**\n * Build the `AssetHandlerPaginationInput` value from the loose tool args, or\n * `undefined` when neither is supplied (so the backend applies its defaults).\n */\nexport function buildPagination(\n limit?: number,\n cursor?: string,\n): { limit?: number; cursor?: string } | undefined {\n const pagination: { limit?: number; cursor?: string } = {};\n if (limit !== undefined) pagination.limit = limit;\n if (cursor !== undefined) pagination.cursor = cursor;\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n","/**\n * AssetHandler asset-inventory tools — the core asset register plus the\n * adjacent CMDB / software-licensing / discovery surfaces.\n *\n * Surface (9):\n * assets_{get,list,create}\n * software_assets_{list,upsert}\n * configuration_items_{list,upsert}\n * discovery_jobs_{list,start}\n *\n * Backend root fields are called by their REAL names (asset / assets /\n * createAsset / softwareAssets / upsertSoftwareAsset / configurationItems /\n * upsertConfigurationItem / discoveryJobs / startDiscoveryJob).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n AssetConditionEnum,\n AssetStatusEnum,\n JsonObject,\n PaginationArgs,\n buildPagination,\n} from './shared.js';\n\nexport function registerAssetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── assets_get ──────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'assets_get')),\n {\n title: 'Get Asset',\n description: 'Fetch a single asset by ID from the bound workspace.',\n inputSchema: { id: z.string().describe('Asset ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n asset: Record<string, unknown> | null;\n }>(ops.GET_ASSET, { id });\n if (!data.asset) return errorResult(`Asset ${id} not found`);\n return jsonResult(data.asset);\n } catch (error) {\n ctx.logger.error('assethandler assets_get failed', { error: String(error) });\n return errorResult(\n `Failed to get asset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── assets_list ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'assets_list')),\n {\n title: 'List Assets',\n description:\n 'List assets in the bound workspace with cursor-based pagination ({ limit, cursor }).',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n assets: Array<Record<string, unknown>>;\n }>(ops.LIST_ASSETS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.assets);\n } catch (error) {\n ctx.logger.error('assethandler assets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list assets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── assets_create ───────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'assets_create')),\n {\n title: 'Create Asset',\n description:\n 'Register a new asset. `assetNumber`, `name`, and `category` are required; `condition`/`status` default server-side.',\n inputSchema: {\n assetNumber: z.string().min(1).describe('Unique asset/tag number'),\n name: z.string().min(1).describe('Asset display name'),\n category: z.string().min(1).describe('Asset category (free-form)'),\n condition: AssetConditionEnum.optional().describe('Physical condition'),\n status: AssetStatusEnum.optional().describe('Lifecycle status'),\n description: z.string().optional().describe('Asset description'),\n serialNumber: z.string().optional().describe('Manufacturer serial number'),\n locationName: z.string().optional().describe('Physical location name'),\n assignedTo: z.string().optional().describe('User/owner the asset is assigned to'),\n tags: z.array(z.string()).optional().describe('Free-form tags'),\n customAttributes: JsonObject.optional().describe('Arbitrary custom attribute JSON'),\n },\n },\n async ({\n assetNumber,\n name,\n category,\n condition,\n status,\n description,\n serialNumber,\n locationName,\n assignedTo,\n tags,\n customAttributes,\n }) => {\n try {\n const input: Record<string, unknown> = { assetNumber, name, category };\n if (condition !== undefined) input.condition = condition;\n if (status !== undefined) input.status = status;\n if (description !== undefined) input.description = description;\n if (serialNumber !== undefined) input.serialNumber = serialNumber;\n if (locationName !== undefined) input.locationName = locationName;\n if (assignedTo !== undefined) input.assignedTo = assignedTo;\n if (tags !== undefined) input.tags = tags;\n if (customAttributes !== undefined) input.customAttributes = customAttributes;\n\n const data = await ctx.gql.workspace.request<{\n createAsset: Record<string, unknown>;\n }>(ops.CREATE_ASSET, { input });\n return jsonResult(data.createAsset);\n } catch (error) {\n ctx.logger.error('assethandler assets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create asset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── software_list ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'software_list')),\n {\n title: 'List Software Assets',\n description: 'List software-license assets with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n softwareAssets: Array<Record<string, unknown>>;\n }>(ops.LIST_SOFTWARE_ASSETS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.softwareAssets);\n } catch (error) {\n ctx.logger.error('assethandler software_list failed', { error: String(error) });\n return errorResult(\n `Failed to list software assets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── software_upsert ────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'software_upsert')),\n {\n title: 'Upsert Software Asset',\n description:\n 'Create or update a software-license asset. Provide `id` to update an existing record; omit it to create.',\n inputSchema: {\n name: z.string().min(1).describe('Software product name'),\n vendor: z.string().min(1).describe('Software vendor'),\n version: z.string().min(1).describe('Version string'),\n licenseType: z.string().min(1).describe('License type (e.g. perpetual, subscription)'),\n id: z.string().optional().describe('Existing software-asset ID (omit to create)'),\n seatsPurchased: z.number().int().optional().describe('Number of seats purchased'),\n seatsUsed: z.number().int().optional().describe('Number of seats in use'),\n },\n },\n async ({ name, vendor, version, licenseType, id, seatsPurchased, seatsUsed }) => {\n try {\n const input: Record<string, unknown> = { name, vendor, version, licenseType };\n if (id !== undefined) input.id = id;\n if (seatsPurchased !== undefined) input.seatsPurchased = seatsPurchased;\n if (seatsUsed !== undefined) input.seatsUsed = seatsUsed;\n\n const data = await ctx.gql.workspace.request<{\n upsertSoftwareAsset: Record<string, unknown>;\n }>(ops.UPSERT_SOFTWARE_ASSET, { input });\n return jsonResult(data.upsertSoftwareAsset);\n } catch (error) {\n ctx.logger.error('assethandler software_upsert failed', { error: String(error) });\n return errorResult(\n `Failed to upsert software asset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── configuration_list ──────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'configuration_list')),\n {\n title: 'List Configuration Items',\n description: 'List CMDB configuration items with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n configurationItems: Array<Record<string, unknown>>;\n }>(ops.LIST_CONFIGURATION_ITEMS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.configurationItems);\n } catch (error) {\n ctx.logger.error('assethandler configuration_list failed', { error: String(error) });\n return errorResult(\n `Failed to list configuration items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── configuration_upsert ────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'configuration_upsert')),\n {\n title: 'Upsert Configuration Item',\n description:\n 'Create or update a CMDB configuration item. Provide `id` to update an existing CI; omit it to create.',\n inputSchema: {\n ciNumber: z.string().min(1).describe('Unique CI number'),\n ciType: z.string().min(1).describe('CI type (e.g. server, database, application)'),\n name: z.string().min(1).describe('CI display name'),\n status: z.string().min(1).describe('CI status (free-form)'),\n id: z.string().optional().describe('Existing CI ID (omit to create)'),\n environment: z.string().optional().describe('Environment (e.g. prod, staging)'),\n owner: z.string().optional().describe('Owning user/team'),\n attributes: JsonObject.optional().describe('Arbitrary CI attribute JSON'),\n },\n },\n async ({ ciNumber, ciType, name, status, id, environment, owner, attributes }) => {\n try {\n const input: Record<string, unknown> = { ciNumber, ciType, name, status };\n if (id !== undefined) input.id = id;\n if (environment !== undefined) input.environment = environment;\n if (owner !== undefined) input.owner = owner;\n if (attributes !== undefined) input.attributes = attributes;\n\n const data = await ctx.gql.workspace.request<{\n upsertConfigurationItem: Record<string, unknown>;\n }>(ops.UPSERT_CONFIGURATION_ITEM, { input });\n return jsonResult(data.upsertConfigurationItem);\n } catch (error) {\n ctx.logger.error('assethandler configuration_upsert failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to upsert configuration item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── discovery_list ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'discovery_list')),\n {\n title: 'List Discovery Jobs',\n description: 'List asset-discovery jobs with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n discoveryJobs: Array<Record<string, unknown>>;\n }>(ops.LIST_DISCOVERY_JOBS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.discoveryJobs);\n } catch (error) {\n ctx.logger.error('assethandler discovery_list failed', { error: String(error) });\n return errorResult(\n `Failed to list discovery jobs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── discovery_start ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'discovery_start')),\n {\n title: 'Start Discovery Job',\n description: 'Kick off an asset-discovery job against a named source.',\n inputSchema: {\n name: z.string().min(1).describe('Discovery job name'),\n source: z.string().min(1).describe('Discovery source (e.g. network range, cloud account)'),\n },\n },\n async ({ name, source }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n startDiscoveryJob: Record<string, unknown>;\n }>(ops.START_DISCOVERY_JOB, { input: { name, source } });\n return jsonResult(data.startDiscoveryJob);\n } catch (error) {\n ctx.logger.error('assethandler discovery_start failed', { error: String(error) });\n return errorResult(\n `Failed to start discovery job: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler IT-service-management tools — the incident / problem / change /\n * work-order / maintenance / knowledge surfaces.\n *\n * Surface (8):\n * incidents_{list,create}\n * problems_list\n * changes_list\n * work_orders_{list,create}\n * maintenance_list\n * knowledge_articles_{list,create}\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n PriorityEnum,\n KnowledgeArticleStatusEnum,\n WorkOrderTypeEnum,\n WorkOrderStatusEnum,\n PaginationArgs,\n buildPagination,\n} from './shared.js';\n\nexport function registerServiceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── incidents_list ────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'incidents_list')),\n {\n title: 'List Incidents',\n description: 'List service incidents with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n incidents: Array<Record<string, unknown>>;\n }>(ops.LIST_INCIDENTS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.incidents);\n } catch (error) {\n ctx.logger.error('assethandler incidents_list failed', { error: String(error) });\n return errorResult(\n `Failed to list incidents: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── incidents_create ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'incidents_create')),\n {\n title: 'Create Incident',\n description:\n 'Open a new service incident. `title`, `description`, and `category` are required; optionally link an asset and set priority.',\n inputSchema: {\n title: z.string().min(1).describe('Incident title'),\n description: z.string().min(1).describe('Incident description'),\n category: z.string().min(1).describe('Incident category (free-form)'),\n priority: PriorityEnum.optional().describe('Incident priority'),\n assetId: z.string().optional().describe('Related asset ID'),\n assignedTo: z.string().optional().describe('Assignee user ID'),\n },\n },\n async ({ title, description, category, priority, assetId, assignedTo }) => {\n try {\n const input: Record<string, unknown> = { title, description, category };\n if (priority !== undefined) input.priority = priority;\n if (assetId !== undefined) input.assetId = assetId;\n if (assignedTo !== undefined) input.assignedTo = assignedTo;\n\n const data = await ctx.gql.workspace.request<{\n createIncident: Record<string, unknown>;\n }>(ops.CREATE_INCIDENT, { input });\n return jsonResult(data.createIncident);\n } catch (error) {\n ctx.logger.error('assethandler incidents_create failed', { error: String(error) });\n return errorResult(\n `Failed to create incident: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── problems_list ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'problems_list')),\n {\n title: 'List Problems',\n description: 'List problem records (root-cause investigations) with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n problems: Array<Record<string, unknown>>;\n }>(ops.LIST_PROBLEMS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.problems);\n } catch (error) {\n ctx.logger.error('assethandler problems_list failed', { error: String(error) });\n return errorResult(\n `Failed to list problems: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── changes_list ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'changes_list')),\n {\n title: 'List Change Requests',\n description: 'List change requests with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n changeRequests: Array<Record<string, unknown>>;\n }>(ops.LIST_CHANGE_REQUESTS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.changeRequests);\n } catch (error) {\n ctx.logger.error('assethandler changes_list failed', { error: String(error) });\n return errorResult(\n `Failed to list change requests: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── work_orders_list ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_orders_list')),\n {\n title: 'List Work Orders',\n description: 'List maintenance work orders with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n workOrders: Array<Record<string, unknown>>;\n }>(ops.LIST_WORK_ORDERS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.workOrders);\n } catch (error) {\n ctx.logger.error('assethandler work_orders_list failed', { error: String(error) });\n return errorResult(\n `Failed to list work orders: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── work_orders_create ────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_orders_create')),\n {\n title: 'Create Work Order',\n description:\n 'Create a maintenance work order. `title` and `type` are required; optionally link an asset, assign it, and set priority/status.',\n inputSchema: {\n title: z.string().min(1).describe('Work order title'),\n type: WorkOrderTypeEnum.describe('Work order type'),\n description: z.string().optional().describe('Work order description'),\n priority: PriorityEnum.optional().describe('Work order priority'),\n status: WorkOrderStatusEnum.optional().describe('Initial status'),\n assetId: z.string().optional().describe('Related asset ID'),\n assignedTo: z.string().optional().describe('Assignee user ID'),\n },\n },\n async ({ title, type, description, priority, status, assetId, assignedTo }) => {\n try {\n const input: Record<string, unknown> = { title, type };\n if (description !== undefined) input.description = description;\n if (priority !== undefined) input.priority = priority;\n if (status !== undefined) input.status = status;\n if (assetId !== undefined) input.assetId = assetId;\n if (assignedTo !== undefined) input.assignedTo = assignedTo;\n\n const data = await ctx.gql.workspace.request<{\n createWorkOrder: Record<string, unknown>;\n }>(ops.CREATE_WORK_ORDER, { input });\n return jsonResult(data.createWorkOrder);\n } catch (error) {\n ctx.logger.error('assethandler work_orders_create failed', { error: String(error) });\n return errorResult(\n `Failed to create work order: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── maintenance_list ──────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'maintenance_list')),\n {\n title: 'List Maintenance Records',\n description: 'List asset maintenance records with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n maintenanceRecords: Array<Record<string, unknown>>;\n }>(ops.LIST_MAINTENANCE_RECORDS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.maintenanceRecords);\n } catch (error) {\n ctx.logger.error('assethandler maintenance_list failed', { error: String(error) });\n return errorResult(\n `Failed to list maintenance records: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── knowledge_list ───────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'knowledge_list')),\n {\n title: 'List Knowledge Articles',\n description: 'List knowledge-base articles with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n knowledgeArticles: Array<Record<string, unknown>>;\n }>(ops.LIST_KNOWLEDGE_ARTICLES, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.knowledgeArticles);\n } catch (error) {\n ctx.logger.error('assethandler knowledge_list failed', { error: String(error) });\n return errorResult(\n `Failed to list knowledge articles: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── knowledge_create ─────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'knowledge_create')),\n {\n title: 'Create Knowledge Article',\n description:\n 'Author a knowledge-base article. `title`, `slug`, and `content` are required; `slug` must be unique. Optionally link an asset/incident and set publication status.',\n inputSchema: {\n title: z.string().min(1).describe('Article title'),\n slug: z.string().min(1).describe('URL slug, unique within the workspace'),\n content: z.string().min(1).describe('Article body (markdown/plain)'),\n summary: z.string().optional().describe('Short summary'),\n status: KnowledgeArticleStatusEnum.optional().describe('Publication status'),\n tags: z.array(z.string()).optional().describe('Free-form tags'),\n relatedAssetId: z.string().optional().describe('Related asset ID'),\n relatedIncidentId: z.string().optional().describe('Related incident ID'),\n },\n },\n async ({ title, slug, content, summary, status, tags, relatedAssetId, relatedIncidentId }) => {\n try {\n const input: Record<string, unknown> = { title, slug, content };\n if (summary !== undefined) input.summary = summary;\n if (status !== undefined) input.status = status;\n if (tags !== undefined) input.tags = tags;\n if (relatedAssetId !== undefined) input.relatedAssetId = relatedAssetId;\n if (relatedIncidentId !== undefined) input.relatedIncidentId = relatedIncidentId;\n\n const data = await ctx.gql.workspace.request<{\n createKnowledgeArticle: Record<string, unknown>;\n }>(ops.CREATE_KNOWLEDGE_ARTICLE, { input });\n return jsonResult(data.createKnowledgeArticle);\n } catch (error) {\n ctx.logger.error('assethandler knowledge_create failed', { error: String(error) });\n return errorResult(\n `Failed to create knowledge article: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler asset-finance tools — budgets, transactions, and invoices.\n *\n * Surface (4):\n * finance_budgets\n * transactions_{list,create}\n * finance_invoices\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n TransactionTypeEnum,\n TransactionStatusEnum,\n PaginationArgs,\n buildPagination,\n} from './shared.js';\n\nexport function registerFinanceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── finance_budgets ──────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'finance_budgets')),\n {\n title: 'List Asset Budgets',\n description: 'List asset budgets with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n budgets: Array<Record<string, unknown>>;\n }>(ops.LIST_BUDGETS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.budgets);\n } catch (error) {\n ctx.logger.error('assethandler finance_budgets failed', { error: String(error) });\n return errorResult(\n `Failed to list budgets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── finance_transactions ─────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'finance_transactions')),\n {\n title: 'List Transactions',\n description: 'List asset financial transactions with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n transactions: Array<Record<string, unknown>>;\n }>(ops.LIST_TRANSACTIONS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.transactions);\n } catch (error) {\n ctx.logger.error('assethandler finance_transactions failed', { error: String(error) });\n return errorResult(\n `Failed to list transactions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── finance_create_transaction ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'finance_create_transaction')),\n {\n title: 'Create Transaction',\n description:\n 'Record an asset financial transaction. `amount`, `category`, `description`, and `type` are required.',\n inputSchema: {\n amount: z.number().describe('Transaction amount'),\n category: z.string().min(1).describe('Transaction category (free-form)'),\n description: z.string().min(1).describe('Transaction description'),\n type: TransactionTypeEnum.describe('Transaction type'),\n currency: z.string().optional().describe('ISO currency code (defaults server-side)'),\n department: z.string().optional().describe('Owning department'),\n status: TransactionStatusEnum.optional().describe('Approval status'),\n vendor: z.string().optional().describe('Vendor name'),\n },\n },\n async ({ amount, category, description, type, currency, department, status, vendor }) => {\n try {\n const input: Record<string, unknown> = { amount, category, description, type };\n if (currency !== undefined) input.currency = currency;\n if (department !== undefined) input.department = department;\n if (status !== undefined) input.status = status;\n if (vendor !== undefined) input.vendor = vendor;\n\n const data = await ctx.gql.workspace.request<{\n createTransaction: Record<string, unknown>;\n }>(ops.CREATE_TRANSACTION, { input });\n return jsonResult(data.createTransaction);\n } catch (error) {\n ctx.logger.error('assethandler finance_create_transaction failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to create transaction: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── finance_invoices ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'finance_invoices')),\n {\n title: 'List Invoices',\n description: 'List vendor invoices with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n invoices: Array<Record<string, unknown>>;\n }>(ops.LIST_INVOICES, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.invoices);\n } catch (error) {\n ctx.logger.error('assethandler finance_invoices failed', { error: String(error) });\n return errorResult(\n `Failed to list invoices: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler governance / risk / compliance tools — compliance frameworks,\n * security policies, security events, and ESG metrics.\n *\n * Surface (5):\n * compliance_frameworks\n * security_policies\n * security_events\n * esg_metrics_{list,upsert}\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { PaginationArgs, buildPagination } from './shared.js';\n\nexport function registerGovernanceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── compliance_frameworks ────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'compliance_frameworks')),\n {\n title: 'List Compliance Frameworks',\n description:\n 'List compliance frameworks and their control scores with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n complianceFrameworks: Array<Record<string, unknown>>;\n }>(ops.LIST_COMPLIANCE_FRAMEWORKS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.complianceFrameworks);\n } catch (error) {\n ctx.logger.error('assethandler compliance_frameworks failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to list compliance frameworks: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── security_policies ────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'security_policies')),\n {\n title: 'List Security Policies',\n description: 'List asset-security policies with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n assetSecurityPolicies: Array<Record<string, unknown>>;\n }>(ops.LIST_SECURITY_POLICIES, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.assetSecurityPolicies);\n } catch (error) {\n ctx.logger.error('assethandler security_policies failed', { error: String(error) });\n return errorResult(\n `Failed to list security policies: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── security_events ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'security_events')),\n {\n title: 'List Security Events',\n description: 'List security events with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n securityEvents: Array<Record<string, unknown>>;\n }>(ops.LIST_SECURITY_EVENTS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.securityEvents);\n } catch (error) {\n ctx.logger.error('assethandler security_events failed', { error: String(error) });\n return errorResult(\n `Failed to list security events: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── esg_list ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'esg_list')),\n {\n title: 'List ESG Metrics',\n description:\n 'List ESG (environmental/social/governance) metrics with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n esgMetrics: Array<Record<string, unknown>>;\n }>(ops.LIST_ESG_METRICS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.esgMetrics);\n } catch (error) {\n ctx.logger.error('assethandler esg_list failed', { error: String(error) });\n return errorResult(\n `Failed to list ESG metrics: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── esg_upsert ────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'esg_upsert')),\n {\n title: 'Upsert ESG Metric',\n description:\n 'Record or update an ESG metric data point for a reporting period. `metricKey` + period identify the metric.',\n inputSchema: {\n category: z.string().min(1).describe('ESG category (Environmental/Social/Governance)'),\n metricKey: z.string().min(1).describe('Stable metric key'),\n metricName: z.string().min(1).describe('Human-readable metric name'),\n value: z.number().describe('Measured value'),\n unit: z.string().min(1).describe('Unit of measure'),\n periodStart: z.string().describe('Reporting-period start (ISO DateTime)'),\n periodEnd: z.string().describe('Reporting-period end (ISO DateTime)'),\n target: z.number().optional().describe('Target value'),\n trend: z.string().optional().describe('Trend indicator (e.g. up, down, flat)'),\n },\n },\n async ({\n category,\n metricKey,\n metricName,\n value,\n unit,\n periodStart,\n periodEnd,\n target,\n trend,\n }) => {\n try {\n const input: Record<string, unknown> = {\n category,\n metricKey,\n metricName,\n value,\n unit,\n periodStart,\n periodEnd,\n };\n if (target !== undefined) input.target = target;\n if (trend !== undefined) input.trend = trend;\n\n const data = await ctx.gql.workspace.request<{\n upsertEsgMetric: Record<string, unknown>;\n }>(ops.UPSERT_ESG_METRIC, { input });\n return jsonResult(data.upsertEsgMetric);\n } catch (error) {\n ctx.logger.error('assethandler esg_upsert failed', { error: String(error) });\n return errorResult(\n `Failed to upsert ESG metric: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler advanced-asset tools — digital twins, IoT devices, AI\n * predictions, and blockchain provenance attestation.\n *\n * Surface (8):\n * digital_twins_{list,create}\n * iot_devices_{list,register}\n * ai_predictions_{list,request}\n * provenance_records_{list,record}\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, PaginationArgs, buildPagination } from './shared.js';\n\nexport function registerInnovationTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── digital_twins_list ────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'digital_twins_list')),\n {\n title: 'List Digital Twins',\n description: 'List asset digital twins with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n digitalTwins: Array<Record<string, unknown>>;\n }>(ops.LIST_DIGITAL_TWINS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.digitalTwins);\n } catch (error) {\n ctx.logger.error('assethandler digital_twins_list failed', { error: String(error) });\n return errorResult(\n `Failed to list digital twins: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── digital_twins_create ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'digital_twins_create')),\n {\n title: 'Create Digital Twin',\n description:\n 'Create a digital twin for an asset. `assetId`, `fidelityLevel`, and `modelRef` are required.',\n inputSchema: {\n assetId: z.string().min(1).describe('Asset ID this twin models'),\n fidelityLevel: z.string().min(1).describe('Fidelity level (e.g. low, medium, high)'),\n modelRef: z.string().min(1).describe('Reference/URI of the 3D/simulation model'),\n geometryRef: z.string().optional().describe('Reference/URI of the geometry asset'),\n properties: JsonObject.optional().describe('Arbitrary twin property JSON'),\n },\n },\n async ({ assetId, fidelityLevel, modelRef, geometryRef, properties }) => {\n try {\n const input: Record<string, unknown> = { assetId, fidelityLevel, modelRef };\n if (geometryRef !== undefined) input.geometryRef = geometryRef;\n if (properties !== undefined) input.properties = properties;\n\n const data = await ctx.gql.workspace.request<{\n createDigitalTwin: Record<string, unknown>;\n }>(ops.CREATE_DIGITAL_TWIN, { input });\n return jsonResult(data.createDigitalTwin);\n } catch (error) {\n ctx.logger.error('assethandler digital_twins_create failed', { error: String(error) });\n return errorResult(\n `Failed to create digital twin: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── iot_list ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'iot_list')),\n {\n title: 'List IoT Devices',\n description: 'List registered IoT devices with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n iotDevices: Array<Record<string, unknown>>;\n }>(ops.LIST_IOT_DEVICES, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.iotDevices);\n } catch (error) {\n ctx.logger.error('assethandler iot_list failed', { error: String(error) });\n return errorResult(\n `Failed to list IoT devices: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── iot_register ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'iot_register')),\n {\n title: 'Register IoT Device',\n description:\n 'Register an IoT device. `deviceId`, `name`, `protocol`, and `type` are required; optionally link an asset.',\n inputSchema: {\n deviceId: z.string().min(1).describe('Stable device identifier'),\n name: z.string().min(1).describe('Device display name'),\n protocol: z.string().min(1).describe('Comms protocol (e.g. MQTT, CoAP, Modbus)'),\n type: z.string().min(1).describe('Device type (free-form)'),\n status: z.string().optional().describe('Initial status (free-form)'),\n assetId: z.string().optional().describe('Asset this device is attached to'),\n metadata: JsonObject.optional().describe('Arbitrary device metadata JSON'),\n },\n },\n async ({ deviceId, name, protocol, type, status, assetId, metadata }) => {\n try {\n const input: Record<string, unknown> = { deviceId, name, protocol, type };\n if (status !== undefined) input.status = status;\n if (assetId !== undefined) input.assetId = assetId;\n if (metadata !== undefined) input.metadata = metadata;\n\n const data = await ctx.gql.workspace.request<{\n registerIoTDevice: Record<string, unknown>;\n }>(ops.REGISTER_IOT_DEVICE, { input });\n return jsonResult(data.registerIoTDevice);\n } catch (error) {\n ctx.logger.error('assethandler iot_register failed', { error: String(error) });\n return errorResult(\n `Failed to register IoT device: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── predictions_list ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'predictions_list')),\n {\n title: 'List AI Predictions',\n description: 'List AI asset predictions with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n aiPredictions: Array<Record<string, unknown>>;\n }>(ops.LIST_AI_PREDICTIONS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.aiPredictions);\n } catch (error) {\n ctx.logger.error('assethandler predictions_list failed', { error: String(error) });\n return errorResult(\n `Failed to list AI predictions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── predictions_request ────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'predictions_request')),\n {\n title: 'Request AI Prediction',\n description:\n 'Request an AI prediction for an asset. `assetId` and `predictionType` are required; optionally supply a feature vector.',\n inputSchema: {\n assetId: z.string().min(1).describe('Asset ID to predict on'),\n predictionType: z\n .string()\n .min(1)\n .describe('Prediction type (e.g. failure, depreciation, utilization)'),\n featureVector: JsonObject.optional().describe('Optional feature-vector JSON'),\n },\n },\n async ({ assetId, predictionType, featureVector }) => {\n try {\n const input: Record<string, unknown> = { assetId, predictionType };\n if (featureVector !== undefined) input.featureVector = featureVector;\n\n const data = await ctx.gql.workspace.request<{\n requestAIPrediction: Record<string, unknown>;\n }>(ops.REQUEST_AI_PREDICTION, { input });\n return jsonResult(data.requestAIPrediction);\n } catch (error) {\n ctx.logger.error('assethandler predictions_request failed', { error: String(error) });\n return errorResult(\n `Failed to request AI prediction: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── provenance_list ───────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'provenance_list')),\n {\n title: 'List Provenance Records',\n description: 'List blockchain provenance-attestation records with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n provenanceRecords: Array<Record<string, unknown>>;\n }>(ops.LIST_PROVENANCE_RECORDS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.provenanceRecords);\n } catch (error) {\n ctx.logger.error('assethandler provenance_list failed', { error: String(error) });\n return errorResult(\n `Failed to list provenance records: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── provenance_record ─────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'provenance_record')),\n {\n title: 'Record Provenance',\n description:\n 'Attest an asset provenance record on-chain. `assetId`, `chainNetwork`, and `hash` are required.',\n inputSchema: {\n assetId: z.string().min(1).describe('Asset ID being attested'),\n chainNetwork: z.string().min(1).describe('Chain network (e.g. ethereum, polygon)'),\n hash: z.string().min(1).describe('Attestation hash'),\n blockNumber: z.number().int().optional().describe('Block number'),\n txHash: z.string().optional().describe('Transaction hash'),\n metadata: JsonObject.optional().describe('Arbitrary attestation metadata JSON'),\n },\n },\n async ({ assetId, chainNetwork, hash, blockNumber, txHash, metadata }) => {\n try {\n const input: Record<string, unknown> = { assetId, chainNetwork, hash };\n if (blockNumber !== undefined) input.blockNumber = blockNumber;\n if (txHash !== undefined) input.txHash = txHash;\n if (metadata !== undefined) input.metadata = metadata;\n\n const data = await ctx.gql.workspace.request<{\n recordProvenance: Record<string, unknown>;\n }>(ops.RECORD_PROVENANCE, { input });\n return jsonResult(data.recordProvenance);\n } catch (error) {\n ctx.logger.error('assethandler provenance_record failed', { error: String(error) });\n return errorResult(\n `Failed to record provenance: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler analytics tool.\n *\n * Surface (1): dashboard_overview.\n *\n * NOTE: the backend schema exposes only the federation noops `_serviceHealth`\n * / `_serviceNoop` (no @public product health query), so this module\n * deliberately registers NO health tool — mirroring the \"add NO health tool\n * unless there is a real @public health field\" rule.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerAnalyticsTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── dashboard_overview ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dashboard_overview')),\n {\n title: 'AssetHandler Dashboard Overview',\n description:\n 'Headline asset-management KPIs: total assets, total transactions, open incidents, and open work orders.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n dashboardOverview: Record<string, unknown>;\n }>(ops.DASHBOARD_OVERVIEW, {});\n return jsonResult(data.dashboardOverview);\n } catch (error) {\n ctx.logger.error('assethandler dashboard_overview failed', { error: String(error) });\n return errorResult(\n `Failed to get dashboard overview: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { DASHBOARD_OVERVIEW, LIST_ASSETS, LIST_INCIDENTS } from './operations.js';\n\n/**\n * Read-only AssetHandler MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n */\nexport function registerAssetHandlerResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const dashboardUri = track(mcpResourceUri(ctx.productName, 'dashboard'));\n const assetsUri = track(mcpResourceUri(ctx.productName, 'assets'));\n const incidentsUri = track(mcpResourceUri(ctx.productName, 'incidents'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'assethandler-schema',\n schemaUri,\n {\n title: 'AssetHandler Domain Schema',\n description:\n 'Overview of the AssetHandler enterprise-asset / ITSM / ITAM domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# AssetHandler Domain (Overview)\n\nEnterprise asset management + IT service management (ITSM) + IT asset\nmanagement (ITAM) platform.\n\n## Entities\n- Asset — the core asset register (category, condition, status, custom attributes)\n- SoftwareAsset — software-license assets (seats, compliance)\n- ConfigurationItem — CMDB configuration items\n- DiscoveryJob — automated asset-discovery runs\n- Incident / Problem / ChangeRequest — ITSM tickets\n- WorkOrder / MaintenanceRecord — maintenance management\n- KnowledgeArticle — knowledge base\n- AssetBudget / Transaction / Invoice — asset finance\n- ComplianceFramework / AssetSecurityPolicy / SecurityEvent — governance, risk & compliance\n- EsgMetric — ESG reporting\n- DigitalTwin / IoTDevice / AIPrediction / ProvenanceRecord — advanced (twins, IoT, AI, blockchain)\n\n## Enums (input-bearing)\n- AssetCondition: DAMAGED, EXCELLENT, FAIR, GOOD, POOR\n- AssetStatus: ACTIVE, DISPOSED, INACTIVE, MAINTENANCE, RETIRED\n- Priority: CRITICAL, HIGH, LOW, MEDIUM\n- KnowledgeArticleStatus: ARCHIVED, DRAFT, PUBLISHED\n- TransactionType: DISPOSAL, LEASE, MAINTENANCE, PURCHASE, TRANSFER\n- TransactionStatus: APPROVED, COMPLETED, PENDING, REJECTED\n- WorkOrderType: CORRECTIVE, EMERGENCY, PREDICTIVE, PREVENTIVE\n- WorkOrderStatus: APPROVED, CANCELLED, COMPLETED, DRAFT, IN_PROGRESS, SCHEDULED\n\n## Tool groups\nassets, service (ITSM), finance, governance, innovation, analytics.\nAll run against the WORKSPACE gateway (workspace-scoped). List tools use\ncursor-based pagination ({ limit, cursor }). There is no public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://dashboard — headline KPIs\n server.registerResource(\n 'assethandler-dashboard',\n dashboardUri,\n {\n title: 'AssetHandler Dashboard Overview',\n description:\n 'Live headline KPIs (total assets, total transactions, open incidents, open work orders).',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${dashboardUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ dashboardOverview: unknown }>(\n DASHBOARD_OVERVIEW,\n {},\n );\n return {\n contents: [\n {\n uri: dashboardUri,\n text: JSON.stringify(data.dashboardOverview, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: dashboardUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://assets — asset register\n server.registerResource(\n 'assethandler-assets',\n assetsUri,\n {\n title: 'AssetHandler Asset Register',\n description: 'The first 50 assets in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${assetsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ assets: unknown }>(LIST_ASSETS, {\n pagination: { limit: 50 },\n });\n return {\n contents: [\n {\n uri: assetsUri,\n text: JSON.stringify(data.assets, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: assetsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://incidents — open incident queue\n server.registerResource(\n 'assethandler-incidents',\n incidentsUri,\n {\n title: 'AssetHandler Incident Queue',\n description: 'The first 50 service incidents in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${incidentsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ incidents: unknown }>(LIST_INCIDENTS, {\n pagination: { limit: 50 },\n });\n return {\n contents: [\n {\n uri: incidentsUri,\n text: JSON.stringify(data.incidents, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: incidentsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * AssetHandler MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerAssetHandlerPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const onboardingName = track(mcpPromptName(p, 'asset-onboarding'));\n const opsName = track(mcpPromptName(p, 'itsm-ops'));\n\n // <product>-asset-onboarding — register an asset + supporting records\n server.registerPrompt(\n onboardingName,\n {\n title: 'Asset Onboarding',\n description:\n 'Guide for onboarding a new asset end to end: register the asset, attach a CMDB configuration item, optionally a digital twin / IoT device, and seed a maintenance/work-order baseline.',\n argsSchema: {\n name: z.string().optional().describe('Asset name'),\n category: z.string().optional().describe('Asset category'),\n },\n },\n ({ name, category }) => {\n ctx.logger.debug(`Prompt ${onboardingName} called`, { name, category });\n const nameNote = name ? `Use the asset name \"${name}\".` : 'Ask the user for the asset name.';\n const categoryNote = category\n ? `Use category \"${category}\".`\n : 'Help the user pick a category.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me onboard a new AssetHandler asset.\n\n1. **Register Asset**: Use ${p}_assets_create. ${nameNote} ${categoryNote} Provide a unique assetNumber; optionally set condition/status, serialNumber, locationName, assignedTo, tags, and customAttributes.\n2. **CMDB**: Use ${p}_configuration_upsert to register a matching configuration item (ciNumber, ciType, status) if the asset is an IT CI.\n3. **(Optional) Digital Twin**: Use ${p}_digital_twins_create with the new assetId, a fidelityLevel, and a modelRef.\n4. **(Optional) IoT Device**: Use ${p}_iot_register to attach a sensor/device (deviceId, name, protocol, type) to the asset.\n5. **Baseline Maintenance**: Use ${p}_work_orders_create (type=PREVENTIVE) to seed a preventive-maintenance work order.\n6. **Verify**: Use ${p}_assets_get to confirm the asset, then ${p}_assets_list to see it in the register.\n\nShow results at each step and confirm before creating downstream records.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-itsm-ops — daily IT service-management operations\n server.registerPrompt(\n opsName,\n {\n title: 'ITSM Operations',\n description:\n 'Daily IT service-management workflow: review KPIs, triage incidents, advance work orders, check problems/changes, and review compliance posture.',\n argsSchema: {\n focus: z\n .string()\n .optional()\n .describe('Optional area to focus on (incidents/maintenance/compliance)'),\n },\n },\n ({ focus }) => {\n ctx.logger.debug(`Prompt ${opsName} called`, { focus });\n const focusNote = focus ? `Focus this run on: ${focus}.` : 'Cover all areas below.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run daily AssetHandler ITSM operations. ${focusNote}\n\n1. **KPIs**: Use ${p}_dashboard_overview for headline numbers (assets, transactions, open incidents, open work orders).\n2. **Incident Triage**: Use ${p}_incidents_list to find open incidents; open new ones with ${p}_incidents_create as needed.\n3. **Problems & Changes**: Use ${p}_problems_list and ${p}_changes_list to review root-cause work and pending changes.\n4. **Maintenance**: Use ${p}_work_orders_list and ${p}_maintenance_list to check the maintenance backlog; create work orders with ${p}_work_orders_create.\n5. **Knowledge**: Use ${p}_knowledge_list; document recurring fixes with ${p}_knowledge_create.\n6. **Governance**: Use ${p}_compliance_frameworks, ${p}_security_policies, and ${p}_security_events to review compliance/security posture.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * AssetHandler module — domain module for the future-products ecosystem program.\n *\n * Covers every root field of wspace-assethandler-svc grouped into per-entity\n * sub-APIs across cohesive domains: assets (assets + software + CMDB +\n * discovery), service (ITSM: incidents/problems/changes/work-orders/\n * maintenance/knowledge), finance (budgets/transactions/invoices), governance\n * (compliance/security/ESG), innovation (digital-twins/IoT/AI/provenance), and\n * analytics. Mirrors the kadaikodi / crewfoundry modules' structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and the canonical tags\n * module's typing discipline.\n *\n * Backend: ~/products/wspace/assethandler/wspace-assethandler-svc/\n * (Hive service name `assethandler`). All operations run against the WORKSPACE\n * gateway. The schema exposes only the federation noops `_serviceHealth` /\n * `_serviceNoop` (no @public health field) — so NO health tool is registered.\n *\n * List queries use the backend's cursor-based `AssetHandlerPaginationInput`\n * ({ cursor, limit }).\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerAssetTools } from './tools/assets.js';\nimport { registerServiceTools } from './tools/service.js';\nimport { registerFinanceTools } from './tools/finance.js';\nimport { registerGovernanceTools } from './tools/governance.js';\nimport { registerInnovationTools } from './tools/innovation.js';\nimport { registerAnalyticsTools } from './tools/analytics.js';\nimport { registerAssetHandlerResources } from './resources.js';\nimport { registerAssetHandlerPrompts } from './prompts.js';\n\nconst assethandlerModule: McpModule = {\n id: 'assethandler',\n version: '0.0.1',\n displayName: 'AssetHandler',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerAssetTools(server, ctx, trackTool);\n registerServiceTools(server, ctx, trackTool);\n registerFinanceTools(server, ctx, trackTool);\n registerGovernanceTools(server, ctx, trackTool);\n registerInnovationTools(server, ctx, trackTool);\n registerAnalyticsTools(server, ctx, trackTool);\n\n registerAssetHandlerResources(server, ctx, trackResource);\n registerAssetHandlerPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default assethandlerModule;\n"]}
1
+ {"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/assethandler/operations.ts","../../../src/modules/assethandler/tools/shared.ts","../../../src/modules/assethandler/tools/assets.ts","../../../src/modules/assethandler/tools/service.ts","../../../src/modules/assethandler/tools/finance.ts","../../../src/modules/assethandler/tools/governance.ts","../../../src/modules/assethandler/tools/innovation.ts","../../../src/modules/assethandler/tools/analytics.ts","../../../src/modules/assethandler/resources.ts","../../../src/modules/assethandler/prompts.ts","../../../src/modules/assethandler/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n\n/**\n * Name-based hint heuristics for MCP `annotations` (readOnlyHint /\n * destructiveHint). Used by tool-governance.ts to auto-fill annotations for\n * the fleet of product modules that call `server.registerTool` directly\n * (bypassing the `registerTool()` core helper) and so never set them\n * explicitly today (BOFF-3903). Deliberately conservative — matched against\n * whole `_`-delimited segments so e.g. `timeentries_delete` and\n * `pomodoro_delete_goal` match, but a hypothetical `undeletable_check`\n * would not.\n *\n * A module can always override the inference by passing an explicit\n * `annotations` object to `registerTool()` / `server.registerTool()`.\n */\nconst DESTRUCTIVE_NAME_SEGMENT = /(?:^|_)delete(?:_|$)/i;\nconst READ_ONLY_NAME_SEGMENT = /(?:^|_)(?:list|get|search|check|read|count|stats|by_date)(?:_|$)/i;\n\n/** True when a tool name looks destructive (irreversibly deletes data) by naming convention. */\nexport function inferDestructiveHint(toolName: string): boolean {\n return DESTRUCTIVE_NAME_SEGMENT.test(toolName);\n}\n\n/**\n * True when a tool name looks read-only by naming convention. Never true for\n * a name that also looks destructive (a tool can't be both).\n */\nexport function inferReadOnlyHint(toolName: string): boolean {\n return !inferDestructiveHint(toolName) && READ_ONLY_NAME_SEGMENT.test(toolName);\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\nimport type { ToolAnnotations } from './tool-governance.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n /**\n * Explicit MCP annotations (readOnlyHint / destructiveHint / ...). Optional\n * — when omitted, `wrapServerWithToolGovernance` (applied centrally in\n * `createMcpServer`) infers them from the tool name. Set this to override\n * the inference for a tool whose name doesn't match the naming convention.\n */\n annotations?: ToolAnnotations;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n ...(metadata.annotations ? { annotations: metadata.annotations } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n { _meta?: { progressToken?: string | number } } | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Centralized GraphQL operations for the AssetHandler MCP module.\n *\n * AssetHandler is the enterprise asset / ITSM / ITAM platform (future-products\n * ecosystem). Backend subgraph:\n * ~/products/wspace/assethandler/wspace-assethandler-svc/\n * (Hive service name `assethandler`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — AssetHandler inputs do NOT carry a workspaceId.\n *\n * List queries use the backend's cursor-based `AssetHandlerPaginationInput`\n * ({ cursor, limit }) — NOT {limit,offset} or {first,skip}. The schema exposes\n * only the federation noops `_serviceHealth` / `_serviceNoop`, so this module\n * deliberately registers NO health tool.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi/crewfoundry modules' operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const ASSET_FIELDS = `\n id assetNumber name description category serialNumber status condition\n locationName assignedTo tags customAttributes workspaceId createdAt updatedAt\n`;\n\nexport const SOFTWARE_ASSET_FIELDS = `\n id name vendor version licenseType seatsPurchased seatsUsed compliancePercent\n workspaceId createdAt updatedAt\n`;\n\nexport const CONFIGURATION_ITEM_FIELDS = `\n id ciNumber ciType name status environment owner attributes workspaceId\n createdAt updatedAt\n`;\n\nexport const DISCOVERY_JOB_FIELDS = `\n id name source status assetsDiscovered createdBy errorSummary startedAt\n completedAt workspaceId createdAt updatedAt\n`;\n\nexport const INCIDENT_FIELDS = `\n id title description category priority status reportedBy reportedAt resolvedAt\n slaBreached assignedTo workspaceId\n`;\n\nexport const PROBLEM_FIELDS = `\n id title description category priority status rootCause workaround\n relatedIncidents assignedTo workspaceId createdAt updatedAt\n`;\n\nexport const CHANGE_REQUEST_FIELDS = `\n id title description type status risk requestedBy assignedTo affectedAssets\n approvals scheduledStart scheduledEnd workspaceId createdAt updatedAt\n`;\n\nexport const WORK_ORDER_FIELDS = `\n id title description type status priority assetId assignedTo workspaceId\n createdAt updatedAt\n`;\n\nexport const MAINTENANCE_RECORD_FIELDS = `\n id assetId title description type status priority estimatedCost actualCost\n checklist scheduledAt completedAt workspaceId createdAt updatedAt\n`;\n\nexport const KNOWLEDGE_ARTICLE_FIELDS = `\n id title slug summary content status tags relatedAssetId relatedIncidentId\n views createdBy updatedBy publishedAt workspaceId createdAt updatedAt\n`;\n\nexport const BUDGET_FIELDS = `\n id name category department period allocated spent remaining status\n workspaceId createdAt updatedAt\n`;\n\nexport const TRANSACTION_FIELDS = `\n id type category description amount currency vendor department status\n occurredAt workspaceId\n`;\n\nexport const INVOICE_FIELDS = `\n id number vendor amount currency status issueDate dueDate items relatedPO\n workspaceId createdAt updatedAt\n`;\n\nexport const COMPLIANCE_FRAMEWORK_FIELDS = `\n id name version status score totalControls passedControls failedControls\n lastAssessment nextAssessment workspaceId createdAt updatedAt\n`;\n\nexport const SECURITY_POLICY_FIELDS = `\n id name version status category description owner applicableTo effectiveDate\n reviewDate workspaceId createdAt updatedAt\n`;\n\nexport const SECURITY_EVENT_FIELDS = `\n id title description eventType severity source resolved ipAddress userId\n occurredAt workspaceId createdAt\n`;\n\nexport const ESG_METRIC_FIELDS = `\n id category metricKey metricName value unit target trend periodStart periodEnd\n updatedBy workspaceId createdAt updatedAt\n`;\n\nexport const DIGITAL_TWIN_FIELDS = `\n id assetId fidelityLevel modelRef geometryRef properties workspaceId\n createdAt updatedAt\n`;\n\nexport const IOT_DEVICE_FIELDS = `\n id deviceId name type protocol status metadata assetId workspaceId\n createdAt updatedAt\n`;\n\nexport const AI_PREDICTION_FIELDS = `\n id assetId predictionType modelVersion score confidence recommendation status\n features generatedAt workspaceId createdAt\n`;\n\nexport const PROVENANCE_RECORD_FIELDS = `\n id assetId chainNetwork hash txHash blockNumber attestedBy attestedAt metadata\n workspaceId createdAt\n`;\n\n// ---------------------------------------------------------------------------\n// Assets\n// ---------------------------------------------------------------------------\n\nexport const GET_ASSET = `\n query AssetHandlerGetAsset($id: ID!) {\n asset(id: $id) {\n ${ASSET_FIELDS}\n }\n }\n`;\n\nexport const LIST_ASSETS = `\n query AssetHandlerListAssets($pagination: AssetHandlerPaginationInput) {\n assets(pagination: $pagination) {\n ${ASSET_FIELDS}\n }\n }\n`;\n\nexport const CREATE_ASSET = `\n mutation AssetHandlerCreateAsset($input: CreateAssetInput!) {\n createAsset(input: $input) {\n ${ASSET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Software assets\n// ---------------------------------------------------------------------------\n\nexport const LIST_SOFTWARE_ASSETS = `\n query AssetHandlerListSoftwareAssets($pagination: AssetHandlerPaginationInput) {\n softwareAssets(pagination: $pagination) {\n ${SOFTWARE_ASSET_FIELDS}\n }\n }\n`;\n\nexport const UPSERT_SOFTWARE_ASSET = `\n mutation AssetHandlerUpsertSoftwareAsset($input: UpsertSoftwareAssetInput!) {\n upsertSoftwareAsset(input: $input) {\n ${SOFTWARE_ASSET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Configuration items (CMDB)\n// ---------------------------------------------------------------------------\n\nexport const LIST_CONFIGURATION_ITEMS = `\n query AssetHandlerListConfigurationItems($pagination: AssetHandlerPaginationInput) {\n configurationItems(pagination: $pagination) {\n ${CONFIGURATION_ITEM_FIELDS}\n }\n }\n`;\n\nexport const UPSERT_CONFIGURATION_ITEM = `\n mutation AssetHandlerUpsertConfigurationItem($input: UpsertConfigurationItemInput!) {\n upsertConfigurationItem(input: $input) {\n ${CONFIGURATION_ITEM_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Discovery jobs\n// ---------------------------------------------------------------------------\n\nexport const LIST_DISCOVERY_JOBS = `\n query AssetHandlerListDiscoveryJobs($pagination: AssetHandlerPaginationInput) {\n discoveryJobs(pagination: $pagination) {\n ${DISCOVERY_JOB_FIELDS}\n }\n }\n`;\n\nexport const START_DISCOVERY_JOB = `\n mutation AssetHandlerStartDiscoveryJob($input: StartDiscoveryJobInput!) {\n startDiscoveryJob(input: $input) {\n ${DISCOVERY_JOB_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Incidents\n// ---------------------------------------------------------------------------\n\nexport const LIST_INCIDENTS = `\n query AssetHandlerListIncidents($pagination: AssetHandlerPaginationInput) {\n incidents(pagination: $pagination) {\n ${INCIDENT_FIELDS}\n }\n }\n`;\n\nexport const CREATE_INCIDENT = `\n mutation AssetHandlerCreateIncident($input: CreateIncidentInput!) {\n createIncident(input: $input) {\n ${INCIDENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Problems\n// ---------------------------------------------------------------------------\n\nexport const LIST_PROBLEMS = `\n query AssetHandlerListProblems($pagination: AssetHandlerPaginationInput) {\n problems(pagination: $pagination) {\n ${PROBLEM_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Change requests\n// ---------------------------------------------------------------------------\n\nexport const LIST_CHANGE_REQUESTS = `\n query AssetHandlerListChangeRequests($pagination: AssetHandlerPaginationInput) {\n changeRequests(pagination: $pagination) {\n ${CHANGE_REQUEST_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Work orders\n// ---------------------------------------------------------------------------\n\nexport const LIST_WORK_ORDERS = `\n query AssetHandlerListWorkOrders($pagination: AssetHandlerPaginationInput) {\n workOrders(pagination: $pagination) {\n ${WORK_ORDER_FIELDS}\n }\n }\n`;\n\nexport const CREATE_WORK_ORDER = `\n mutation AssetHandlerCreateWorkOrder($input: CreateWorkOrderInput!) {\n createWorkOrder(input: $input) {\n ${WORK_ORDER_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Maintenance records\n// ---------------------------------------------------------------------------\n\nexport const LIST_MAINTENANCE_RECORDS = `\n query AssetHandlerListMaintenanceRecords($pagination: AssetHandlerPaginationInput) {\n maintenanceRecords(pagination: $pagination) {\n ${MAINTENANCE_RECORD_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Knowledge articles\n// ---------------------------------------------------------------------------\n\nexport const LIST_KNOWLEDGE_ARTICLES = `\n query AssetHandlerListKnowledgeArticles($pagination: AssetHandlerPaginationInput) {\n knowledgeArticles(pagination: $pagination) {\n ${KNOWLEDGE_ARTICLE_FIELDS}\n }\n }\n`;\n\nexport const CREATE_KNOWLEDGE_ARTICLE = `\n mutation AssetHandlerCreateKnowledgeArticle($input: CreateKnowledgeArticleInput!) {\n createKnowledgeArticle(input: $input) {\n ${KNOWLEDGE_ARTICLE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Budgets\n// ---------------------------------------------------------------------------\n\nexport const LIST_BUDGETS = `\n query AssetHandlerListBudgets($pagination: AssetHandlerPaginationInput) {\n budgets(pagination: $pagination) {\n ${BUDGET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Transactions\n// ---------------------------------------------------------------------------\n\nexport const LIST_TRANSACTIONS = `\n query AssetHandlerListTransactions($pagination: AssetHandlerPaginationInput) {\n transactions(pagination: $pagination) {\n ${TRANSACTION_FIELDS}\n }\n }\n`;\n\nexport const CREATE_TRANSACTION = `\n mutation AssetHandlerCreateTransaction($input: CreateTransactionInput!) {\n createTransaction(input: $input) {\n ${TRANSACTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Invoices\n// ---------------------------------------------------------------------------\n\nexport const LIST_INVOICES = `\n query AssetHandlerListInvoices($pagination: AssetHandlerPaginationInput) {\n invoices(pagination: $pagination) {\n ${INVOICE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Compliance frameworks\n// ---------------------------------------------------------------------------\n\nexport const LIST_COMPLIANCE_FRAMEWORKS = `\n query AssetHandlerListComplianceFrameworks($pagination: AssetHandlerPaginationInput) {\n complianceFrameworks(pagination: $pagination) {\n ${COMPLIANCE_FRAMEWORK_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Security policies\n// ---------------------------------------------------------------------------\n\nexport const LIST_SECURITY_POLICIES = `\n query AssetHandlerListSecurityPolicies($pagination: AssetHandlerPaginationInput) {\n assetSecurityPolicies(pagination: $pagination) {\n ${SECURITY_POLICY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Security events\n// ---------------------------------------------------------------------------\n\nexport const LIST_SECURITY_EVENTS = `\n query AssetHandlerListSecurityEvents($pagination: AssetHandlerPaginationInput) {\n securityEvents(pagination: $pagination) {\n ${SECURITY_EVENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// ESG metrics\n// ---------------------------------------------------------------------------\n\nexport const LIST_ESG_METRICS = `\n query AssetHandlerListEsgMetrics($pagination: AssetHandlerPaginationInput) {\n esgMetrics(pagination: $pagination) {\n ${ESG_METRIC_FIELDS}\n }\n }\n`;\n\nexport const UPSERT_ESG_METRIC = `\n mutation AssetHandlerUpsertEsgMetric($input: UpsertEsgMetricInput!) {\n upsertEsgMetric(input: $input) {\n ${ESG_METRIC_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Digital twins\n// ---------------------------------------------------------------------------\n\nexport const LIST_DIGITAL_TWINS = `\n query AssetHandlerListDigitalTwins($pagination: AssetHandlerPaginationInput) {\n digitalTwins(pagination: $pagination) {\n ${DIGITAL_TWIN_FIELDS}\n }\n }\n`;\n\nexport const CREATE_DIGITAL_TWIN = `\n mutation AssetHandlerCreateDigitalTwin($input: CreateDigitalTwinInput!) {\n createDigitalTwin(input: $input) {\n ${DIGITAL_TWIN_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// IoT devices\n// ---------------------------------------------------------------------------\n\nexport const LIST_IOT_DEVICES = `\n query AssetHandlerListIotDevices($pagination: AssetHandlerPaginationInput) {\n iotDevices(pagination: $pagination) {\n ${IOT_DEVICE_FIELDS}\n }\n }\n`;\n\nexport const REGISTER_IOT_DEVICE = `\n mutation AssetHandlerRegisterIoTDevice($input: RegisterIoTDeviceInput!) {\n registerIoTDevice(input: $input) {\n ${IOT_DEVICE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// AI predictions\n// ---------------------------------------------------------------------------\n\nexport const LIST_AI_PREDICTIONS = `\n query AssetHandlerListAiPredictions($pagination: AssetHandlerPaginationInput) {\n aiPredictions(pagination: $pagination) {\n ${AI_PREDICTION_FIELDS}\n }\n }\n`;\n\nexport const REQUEST_AI_PREDICTION = `\n mutation AssetHandlerRequestAIPrediction($input: RequestAIPredictionInput!) {\n requestAIPrediction(input: $input) {\n ${AI_PREDICTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Provenance records (blockchain attestation)\n// ---------------------------------------------------------------------------\n\nexport const LIST_PROVENANCE_RECORDS = `\n query AssetHandlerListProvenanceRecords($pagination: AssetHandlerPaginationInput) {\n provenanceRecords(pagination: $pagination) {\n ${PROVENANCE_RECORD_FIELDS}\n }\n }\n`;\n\nexport const RECORD_PROVENANCE = `\n mutation AssetHandlerRecordProvenance($input: RecordProvenanceInput!) {\n recordProvenance(input: $input) {\n ${PROVENANCE_RECORD_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Dashboard\n// ---------------------------------------------------------------------------\n\nexport const DASHBOARD_OVERVIEW = `\n query AssetHandlerDashboardOverview {\n dashboardOverview {\n totalAssets\n totalTransactions\n openIncidents\n openWorkOrders\n }\n }\n`;\n","/**\n * Shared zod schemas + helpers for the AssetHandler tool surface.\n *\n * Only the backend enums that actually appear in a mutation INPUT are mirrored\n * as tight zod enums (so Claude Desktop grounds tool calls against the exact\n * allowed values). Read-only enums that never feed an input (e.g.\n * AssetBudgetStatus, ComplianceStatus, PolicyStatus, SecuritySeverity) are not\n * re-declared here — they only ever come back in responses.\n *\n * `JSONObject` scalar inputs (customAttributes, properties, metadata,\n * attributes, featureVector) are modelled as permissive object records — the\n * backend accepts arbitrary JSON, but a record shape gives the LLM a typed hint.\n *\n * All list queries page through the backend's cursor-based\n * `AssetHandlerPaginationInput` ({ cursor, limit }).\n */\n\nimport { z } from 'zod';\n\nexport const AssetConditionEnum = z\n .enum(['DAMAGED', 'EXCELLENT', 'FAIR', 'GOOD', 'POOR'])\n .describe('Physical condition of an asset');\n\nexport const AssetStatusEnum = z\n .enum(['ACTIVE', 'DISPOSED', 'INACTIVE', 'MAINTENANCE', 'RETIRED'])\n .describe('Lifecycle status of an asset');\n\nexport const PriorityEnum = z\n .enum(['CRITICAL', 'HIGH', 'LOW', 'MEDIUM'])\n .describe('Priority of an incident or work order');\n\nexport const KnowledgeArticleStatusEnum = z\n .enum(['ARCHIVED', 'DRAFT', 'PUBLISHED'])\n .describe('Publication status of a knowledge article');\n\nexport const TransactionTypeEnum = z\n .enum(['DISPOSAL', 'LEASE', 'MAINTENANCE', 'PURCHASE', 'TRANSFER'])\n .describe('Category of an asset financial transaction');\n\nexport const TransactionStatusEnum = z\n .enum(['APPROVED', 'COMPLETED', 'PENDING', 'REJECTED'])\n .describe('Approval status of a transaction');\n\nexport const WorkOrderTypeEnum = z\n .enum(['CORRECTIVE', 'EMERGENCY', 'PREDICTIVE', 'PREVENTIVE'])\n .describe('Type of maintenance work order');\n\nexport const WorkOrderStatusEnum = z\n .enum(['APPROVED', 'CANCELLED', 'COMPLETED', 'DRAFT', 'IN_PROGRESS', 'SCHEDULED'])\n .describe('Lifecycle status of a work order');\n\n/** Permissive JSON-object schema for `JSONObject` scalar inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n\n/** Cursor-based pagination args shared by every list tool. */\nexport const PaginationArgs = {\n limit: z.number().int().optional().describe('Page size (server-clamped to ≤100)'),\n cursor: z\n .string()\n .optional()\n .describe('Opaque cursor — the `id` returned from the previous page'),\n} as const;\n\n/**\n * Build the `AssetHandlerPaginationInput` value from the loose tool args, or\n * `undefined` when neither is supplied (so the backend applies its defaults).\n */\nexport function buildPagination(\n limit?: number,\n cursor?: string,\n): { limit?: number; cursor?: string } | undefined {\n const pagination: { limit?: number; cursor?: string } = {};\n if (limit !== undefined) pagination.limit = limit;\n if (cursor !== undefined) pagination.cursor = cursor;\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n","/**\n * AssetHandler asset-inventory tools — the core asset register plus the\n * adjacent CMDB / software-licensing / discovery surfaces.\n *\n * Surface (9):\n * assets_{get,list,create}\n * software_assets_{list,upsert}\n * configuration_items_{list,upsert}\n * discovery_jobs_{list,start}\n *\n * Backend root fields are called by their REAL names (asset / assets /\n * createAsset / softwareAssets / upsertSoftwareAsset / configurationItems /\n * upsertConfigurationItem / discoveryJobs / startDiscoveryJob).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n AssetConditionEnum,\n AssetStatusEnum,\n JsonObject,\n PaginationArgs,\n buildPagination,\n} from './shared.js';\n\nexport function registerAssetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── assets_get ──────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'assets_get')),\n {\n title: 'Get Asset',\n description: 'Fetch a single asset by ID from the bound workspace.',\n inputSchema: { id: z.string().describe('Asset ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n asset: Record<string, unknown> | null;\n }>(ops.GET_ASSET, { id });\n if (!data.asset) return errorResult(`Asset ${id} not found`);\n return jsonResult(data.asset);\n } catch (error) {\n ctx.logger.error('assethandler assets_get failed', { error: String(error) });\n return errorResult(\n `Failed to get asset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── assets_list ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'assets_list')),\n {\n title: 'List Assets',\n description:\n 'List assets in the bound workspace with cursor-based pagination ({ limit, cursor }).',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n assets: Array<Record<string, unknown>>;\n }>(ops.LIST_ASSETS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.assets);\n } catch (error) {\n ctx.logger.error('assethandler assets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list assets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── assets_create ───────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'assets_create')),\n {\n title: 'Create Asset',\n description:\n 'Register a new asset. `assetNumber`, `name`, and `category` are required; `condition`/`status` default server-side.',\n inputSchema: {\n assetNumber: z.string().min(1).describe('Unique asset/tag number'),\n name: z.string().min(1).describe('Asset display name'),\n category: z.string().min(1).describe('Asset category (free-form)'),\n condition: AssetConditionEnum.optional().describe('Physical condition'),\n status: AssetStatusEnum.optional().describe('Lifecycle status'),\n description: z.string().optional().describe('Asset description'),\n serialNumber: z.string().optional().describe('Manufacturer serial number'),\n locationName: z.string().optional().describe('Physical location name'),\n assignedTo: z.string().optional().describe('User/owner the asset is assigned to'),\n tags: z.array(z.string()).optional().describe('Free-form tags'),\n customAttributes: JsonObject.optional().describe('Arbitrary custom attribute JSON'),\n },\n },\n async ({\n assetNumber,\n name,\n category,\n condition,\n status,\n description,\n serialNumber,\n locationName,\n assignedTo,\n tags,\n customAttributes,\n }) => {\n try {\n const input: Record<string, unknown> = { assetNumber, name, category };\n if (condition !== undefined) input.condition = condition;\n if (status !== undefined) input.status = status;\n if (description !== undefined) input.description = description;\n if (serialNumber !== undefined) input.serialNumber = serialNumber;\n if (locationName !== undefined) input.locationName = locationName;\n if (assignedTo !== undefined) input.assignedTo = assignedTo;\n if (tags !== undefined) input.tags = tags;\n if (customAttributes !== undefined) input.customAttributes = customAttributes;\n\n const data = await ctx.gql.workspace.request<{\n createAsset: Record<string, unknown>;\n }>(ops.CREATE_ASSET, { input });\n return jsonResult(data.createAsset);\n } catch (error) {\n ctx.logger.error('assethandler assets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create asset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── software_list ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'software_list')),\n {\n title: 'List Software Assets',\n description: 'List software-license assets with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n softwareAssets: Array<Record<string, unknown>>;\n }>(ops.LIST_SOFTWARE_ASSETS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.softwareAssets);\n } catch (error) {\n ctx.logger.error('assethandler software_list failed', { error: String(error) });\n return errorResult(\n `Failed to list software assets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── software_upsert ────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'software_upsert')),\n {\n title: 'Upsert Software Asset',\n description:\n 'Create or update a software-license asset. Provide `id` to update an existing record; omit it to create.',\n inputSchema: {\n name: z.string().min(1).describe('Software product name'),\n vendor: z.string().min(1).describe('Software vendor'),\n version: z.string().min(1).describe('Version string'),\n licenseType: z.string().min(1).describe('License type (e.g. perpetual, subscription)'),\n id: z.string().optional().describe('Existing software-asset ID (omit to create)'),\n seatsPurchased: z.number().int().optional().describe('Number of seats purchased'),\n seatsUsed: z.number().int().optional().describe('Number of seats in use'),\n },\n },\n async ({ name, vendor, version, licenseType, id, seatsPurchased, seatsUsed }) => {\n try {\n const input: Record<string, unknown> = { name, vendor, version, licenseType };\n if (id !== undefined) input.id = id;\n if (seatsPurchased !== undefined) input.seatsPurchased = seatsPurchased;\n if (seatsUsed !== undefined) input.seatsUsed = seatsUsed;\n\n const data = await ctx.gql.workspace.request<{\n upsertSoftwareAsset: Record<string, unknown>;\n }>(ops.UPSERT_SOFTWARE_ASSET, { input });\n return jsonResult(data.upsertSoftwareAsset);\n } catch (error) {\n ctx.logger.error('assethandler software_upsert failed', { error: String(error) });\n return errorResult(\n `Failed to upsert software asset: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── configuration_list ──────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'configuration_list')),\n {\n title: 'List Configuration Items',\n description: 'List CMDB configuration items with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n configurationItems: Array<Record<string, unknown>>;\n }>(ops.LIST_CONFIGURATION_ITEMS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.configurationItems);\n } catch (error) {\n ctx.logger.error('assethandler configuration_list failed', { error: String(error) });\n return errorResult(\n `Failed to list configuration items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── configuration_upsert ────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'configuration_upsert')),\n {\n title: 'Upsert Configuration Item',\n description:\n 'Create or update a CMDB configuration item. Provide `id` to update an existing CI; omit it to create.',\n inputSchema: {\n ciNumber: z.string().min(1).describe('Unique CI number'),\n ciType: z.string().min(1).describe('CI type (e.g. server, database, application)'),\n name: z.string().min(1).describe('CI display name'),\n status: z.string().min(1).describe('CI status (free-form)'),\n id: z.string().optional().describe('Existing CI ID (omit to create)'),\n environment: z.string().optional().describe('Environment (e.g. prod, staging)'),\n owner: z.string().optional().describe('Owning user/team'),\n attributes: JsonObject.optional().describe('Arbitrary CI attribute JSON'),\n },\n },\n async ({ ciNumber, ciType, name, status, id, environment, owner, attributes }) => {\n try {\n const input: Record<string, unknown> = { ciNumber, ciType, name, status };\n if (id !== undefined) input.id = id;\n if (environment !== undefined) input.environment = environment;\n if (owner !== undefined) input.owner = owner;\n if (attributes !== undefined) input.attributes = attributes;\n\n const data = await ctx.gql.workspace.request<{\n upsertConfigurationItem: Record<string, unknown>;\n }>(ops.UPSERT_CONFIGURATION_ITEM, { input });\n return jsonResult(data.upsertConfigurationItem);\n } catch (error) {\n ctx.logger.error('assethandler configuration_upsert failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to upsert configuration item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── discovery_list ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'discovery_list')),\n {\n title: 'List Discovery Jobs',\n description: 'List asset-discovery jobs with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n discoveryJobs: Array<Record<string, unknown>>;\n }>(ops.LIST_DISCOVERY_JOBS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.discoveryJobs);\n } catch (error) {\n ctx.logger.error('assethandler discovery_list failed', { error: String(error) });\n return errorResult(\n `Failed to list discovery jobs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── discovery_start ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'discovery_start')),\n {\n title: 'Start Discovery Job',\n description: 'Kick off an asset-discovery job against a named source.',\n inputSchema: {\n name: z.string().min(1).describe('Discovery job name'),\n source: z.string().min(1).describe('Discovery source (e.g. network range, cloud account)'),\n },\n },\n async ({ name, source }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n startDiscoveryJob: Record<string, unknown>;\n }>(ops.START_DISCOVERY_JOB, { input: { name, source } });\n return jsonResult(data.startDiscoveryJob);\n } catch (error) {\n ctx.logger.error('assethandler discovery_start failed', { error: String(error) });\n return errorResult(\n `Failed to start discovery job: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler IT-service-management tools — the incident / problem / change /\n * work-order / maintenance / knowledge surfaces.\n *\n * Surface (8):\n * incidents_{list,create}\n * problems_list\n * changes_list\n * work_orders_{list,create}\n * maintenance_list\n * knowledge_articles_{list,create}\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n PriorityEnum,\n KnowledgeArticleStatusEnum,\n WorkOrderTypeEnum,\n WorkOrderStatusEnum,\n PaginationArgs,\n buildPagination,\n} from './shared.js';\n\nexport function registerServiceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── incidents_list ────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'incidents_list')),\n {\n title: 'List Incidents',\n description: 'List service incidents with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n incidents: Array<Record<string, unknown>>;\n }>(ops.LIST_INCIDENTS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.incidents);\n } catch (error) {\n ctx.logger.error('assethandler incidents_list failed', { error: String(error) });\n return errorResult(\n `Failed to list incidents: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── incidents_create ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'incidents_create')),\n {\n title: 'Create Incident',\n description:\n 'Open a new service incident. `title`, `description`, and `category` are required; optionally link an asset and set priority.',\n inputSchema: {\n title: z.string().min(1).describe('Incident title'),\n description: z.string().min(1).describe('Incident description'),\n category: z.string().min(1).describe('Incident category (free-form)'),\n priority: PriorityEnum.optional().describe('Incident priority'),\n assetId: z.string().optional().describe('Related asset ID'),\n assignedTo: z.string().optional().describe('Assignee user ID'),\n },\n },\n async ({ title, description, category, priority, assetId, assignedTo }) => {\n try {\n const input: Record<string, unknown> = { title, description, category };\n if (priority !== undefined) input.priority = priority;\n if (assetId !== undefined) input.assetId = assetId;\n if (assignedTo !== undefined) input.assignedTo = assignedTo;\n\n const data = await ctx.gql.workspace.request<{\n createIncident: Record<string, unknown>;\n }>(ops.CREATE_INCIDENT, { input });\n return jsonResult(data.createIncident);\n } catch (error) {\n ctx.logger.error('assethandler incidents_create failed', { error: String(error) });\n return errorResult(\n `Failed to create incident: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── problems_list ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'problems_list')),\n {\n title: 'List Problems',\n description: 'List problem records (root-cause investigations) with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n problems: Array<Record<string, unknown>>;\n }>(ops.LIST_PROBLEMS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.problems);\n } catch (error) {\n ctx.logger.error('assethandler problems_list failed', { error: String(error) });\n return errorResult(\n `Failed to list problems: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── changes_list ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'changes_list')),\n {\n title: 'List Change Requests',\n description: 'List change requests with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n changeRequests: Array<Record<string, unknown>>;\n }>(ops.LIST_CHANGE_REQUESTS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.changeRequests);\n } catch (error) {\n ctx.logger.error('assethandler changes_list failed', { error: String(error) });\n return errorResult(\n `Failed to list change requests: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── work_orders_list ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_orders_list')),\n {\n title: 'List Work Orders',\n description: 'List maintenance work orders with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n workOrders: Array<Record<string, unknown>>;\n }>(ops.LIST_WORK_ORDERS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.workOrders);\n } catch (error) {\n ctx.logger.error('assethandler work_orders_list failed', { error: String(error) });\n return errorResult(\n `Failed to list work orders: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── work_orders_create ────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'work_orders_create')),\n {\n title: 'Create Work Order',\n description:\n 'Create a maintenance work order. `title` and `type` are required; optionally link an asset, assign it, and set priority/status.',\n inputSchema: {\n title: z.string().min(1).describe('Work order title'),\n type: WorkOrderTypeEnum.describe('Work order type'),\n description: z.string().optional().describe('Work order description'),\n priority: PriorityEnum.optional().describe('Work order priority'),\n status: WorkOrderStatusEnum.optional().describe('Initial status'),\n assetId: z.string().optional().describe('Related asset ID'),\n assignedTo: z.string().optional().describe('Assignee user ID'),\n },\n },\n async ({ title, type, description, priority, status, assetId, assignedTo }) => {\n try {\n const input: Record<string, unknown> = { title, type };\n if (description !== undefined) input.description = description;\n if (priority !== undefined) input.priority = priority;\n if (status !== undefined) input.status = status;\n if (assetId !== undefined) input.assetId = assetId;\n if (assignedTo !== undefined) input.assignedTo = assignedTo;\n\n const data = await ctx.gql.workspace.request<{\n createWorkOrder: Record<string, unknown>;\n }>(ops.CREATE_WORK_ORDER, { input });\n return jsonResult(data.createWorkOrder);\n } catch (error) {\n ctx.logger.error('assethandler work_orders_create failed', { error: String(error) });\n return errorResult(\n `Failed to create work order: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── maintenance_list ──────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'maintenance_list')),\n {\n title: 'List Maintenance Records',\n description: 'List asset maintenance records with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n maintenanceRecords: Array<Record<string, unknown>>;\n }>(ops.LIST_MAINTENANCE_RECORDS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.maintenanceRecords);\n } catch (error) {\n ctx.logger.error('assethandler maintenance_list failed', { error: String(error) });\n return errorResult(\n `Failed to list maintenance records: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── knowledge_list ───────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'knowledge_list')),\n {\n title: 'List Knowledge Articles',\n description: 'List knowledge-base articles with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n knowledgeArticles: Array<Record<string, unknown>>;\n }>(ops.LIST_KNOWLEDGE_ARTICLES, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.knowledgeArticles);\n } catch (error) {\n ctx.logger.error('assethandler knowledge_list failed', { error: String(error) });\n return errorResult(\n `Failed to list knowledge articles: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── knowledge_create ─────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'knowledge_create')),\n {\n title: 'Create Knowledge Article',\n description:\n 'Author a knowledge-base article. `title`, `slug`, and `content` are required; `slug` must be unique. Optionally link an asset/incident and set publication status.',\n inputSchema: {\n title: z.string().min(1).describe('Article title'),\n slug: z.string().min(1).describe('URL slug, unique within the workspace'),\n content: z.string().min(1).describe('Article body (markdown/plain)'),\n summary: z.string().optional().describe('Short summary'),\n status: KnowledgeArticleStatusEnum.optional().describe('Publication status'),\n tags: z.array(z.string()).optional().describe('Free-form tags'),\n relatedAssetId: z.string().optional().describe('Related asset ID'),\n relatedIncidentId: z.string().optional().describe('Related incident ID'),\n },\n },\n async ({ title, slug, content, summary, status, tags, relatedAssetId, relatedIncidentId }) => {\n try {\n const input: Record<string, unknown> = { title, slug, content };\n if (summary !== undefined) input.summary = summary;\n if (status !== undefined) input.status = status;\n if (tags !== undefined) input.tags = tags;\n if (relatedAssetId !== undefined) input.relatedAssetId = relatedAssetId;\n if (relatedIncidentId !== undefined) input.relatedIncidentId = relatedIncidentId;\n\n const data = await ctx.gql.workspace.request<{\n createKnowledgeArticle: Record<string, unknown>;\n }>(ops.CREATE_KNOWLEDGE_ARTICLE, { input });\n return jsonResult(data.createKnowledgeArticle);\n } catch (error) {\n ctx.logger.error('assethandler knowledge_create failed', { error: String(error) });\n return errorResult(\n `Failed to create knowledge article: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler asset-finance tools — budgets, transactions, and invoices.\n *\n * Surface (4):\n * finance_budgets\n * transactions_{list,create}\n * finance_invoices\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n TransactionTypeEnum,\n TransactionStatusEnum,\n PaginationArgs,\n buildPagination,\n} from './shared.js';\n\nexport function registerFinanceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── finance_budgets ──────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'finance_budgets')),\n {\n title: 'List Asset Budgets',\n description: 'List asset budgets with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n budgets: Array<Record<string, unknown>>;\n }>(ops.LIST_BUDGETS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.budgets);\n } catch (error) {\n ctx.logger.error('assethandler finance_budgets failed', { error: String(error) });\n return errorResult(\n `Failed to list budgets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── finance_transactions ─────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'finance_transactions')),\n {\n title: 'List Transactions',\n description: 'List asset financial transactions with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n transactions: Array<Record<string, unknown>>;\n }>(ops.LIST_TRANSACTIONS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.transactions);\n } catch (error) {\n ctx.logger.error('assethandler finance_transactions failed', { error: String(error) });\n return errorResult(\n `Failed to list transactions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── finance_create_transaction ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'finance_create_transaction')),\n {\n title: 'Create Transaction',\n description:\n 'Record an asset financial transaction. `amount`, `category`, `description`, and `type` are required.',\n inputSchema: {\n amount: z.number().describe('Transaction amount'),\n category: z.string().min(1).describe('Transaction category (free-form)'),\n description: z.string().min(1).describe('Transaction description'),\n type: TransactionTypeEnum.describe('Transaction type'),\n currency: z.string().optional().describe('ISO currency code (defaults server-side)'),\n department: z.string().optional().describe('Owning department'),\n status: TransactionStatusEnum.optional().describe('Approval status'),\n vendor: z.string().optional().describe('Vendor name'),\n },\n },\n async ({ amount, category, description, type, currency, department, status, vendor }) => {\n try {\n const input: Record<string, unknown> = { amount, category, description, type };\n if (currency !== undefined) input.currency = currency;\n if (department !== undefined) input.department = department;\n if (status !== undefined) input.status = status;\n if (vendor !== undefined) input.vendor = vendor;\n\n const data = await ctx.gql.workspace.request<{\n createTransaction: Record<string, unknown>;\n }>(ops.CREATE_TRANSACTION, { input });\n return jsonResult(data.createTransaction);\n } catch (error) {\n ctx.logger.error('assethandler finance_create_transaction failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to create transaction: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── finance_invoices ─────────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'finance_invoices')),\n {\n title: 'List Invoices',\n description: 'List vendor invoices with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n invoices: Array<Record<string, unknown>>;\n }>(ops.LIST_INVOICES, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.invoices);\n } catch (error) {\n ctx.logger.error('assethandler finance_invoices failed', { error: String(error) });\n return errorResult(\n `Failed to list invoices: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler governance / risk / compliance tools — compliance frameworks,\n * security policies, security events, and ESG metrics.\n *\n * Surface (5):\n * compliance_frameworks\n * security_policies\n * security_events\n * esg_metrics_{list,upsert}\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { PaginationArgs, buildPagination } from './shared.js';\n\nexport function registerGovernanceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── compliance_frameworks ────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'compliance_frameworks')),\n {\n title: 'List Compliance Frameworks',\n description:\n 'List compliance frameworks and their control scores with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n complianceFrameworks: Array<Record<string, unknown>>;\n }>(ops.LIST_COMPLIANCE_FRAMEWORKS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.complianceFrameworks);\n } catch (error) {\n ctx.logger.error('assethandler compliance_frameworks failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to list compliance frameworks: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── security_policies ────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'security_policies')),\n {\n title: 'List Security Policies',\n description: 'List asset-security policies with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n assetSecurityPolicies: Array<Record<string, unknown>>;\n }>(ops.LIST_SECURITY_POLICIES, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.assetSecurityPolicies);\n } catch (error) {\n ctx.logger.error('assethandler security_policies failed', { error: String(error) });\n return errorResult(\n `Failed to list security policies: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── security_events ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'security_events')),\n {\n title: 'List Security Events',\n description: 'List security events with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n securityEvents: Array<Record<string, unknown>>;\n }>(ops.LIST_SECURITY_EVENTS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.securityEvents);\n } catch (error) {\n ctx.logger.error('assethandler security_events failed', { error: String(error) });\n return errorResult(\n `Failed to list security events: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── esg_list ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'esg_list')),\n {\n title: 'List ESG Metrics',\n description:\n 'List ESG (environmental/social/governance) metrics with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n esgMetrics: Array<Record<string, unknown>>;\n }>(ops.LIST_ESG_METRICS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.esgMetrics);\n } catch (error) {\n ctx.logger.error('assethandler esg_list failed', { error: String(error) });\n return errorResult(\n `Failed to list ESG metrics: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── esg_upsert ────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'esg_upsert')),\n {\n title: 'Upsert ESG Metric',\n description:\n 'Record or update an ESG metric data point for a reporting period. `metricKey` + period identify the metric.',\n inputSchema: {\n category: z.string().min(1).describe('ESG category (Environmental/Social/Governance)'),\n metricKey: z.string().min(1).describe('Stable metric key'),\n metricName: z.string().min(1).describe('Human-readable metric name'),\n value: z.number().describe('Measured value'),\n unit: z.string().min(1).describe('Unit of measure'),\n periodStart: z.string().describe('Reporting-period start (ISO DateTime)'),\n periodEnd: z.string().describe('Reporting-period end (ISO DateTime)'),\n target: z.number().optional().describe('Target value'),\n trend: z.string().optional().describe('Trend indicator (e.g. up, down, flat)'),\n },\n },\n async ({\n category,\n metricKey,\n metricName,\n value,\n unit,\n periodStart,\n periodEnd,\n target,\n trend,\n }) => {\n try {\n const input: Record<string, unknown> = {\n category,\n metricKey,\n metricName,\n value,\n unit,\n periodStart,\n periodEnd,\n };\n if (target !== undefined) input.target = target;\n if (trend !== undefined) input.trend = trend;\n\n const data = await ctx.gql.workspace.request<{\n upsertEsgMetric: Record<string, unknown>;\n }>(ops.UPSERT_ESG_METRIC, { input });\n return jsonResult(data.upsertEsgMetric);\n } catch (error) {\n ctx.logger.error('assethandler esg_upsert failed', { error: String(error) });\n return errorResult(\n `Failed to upsert ESG metric: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler advanced-asset tools — digital twins, IoT devices, AI\n * predictions, and blockchain provenance attestation.\n *\n * Surface (8):\n * digital_twins_{list,create}\n * iot_devices_{list,register}\n * ai_predictions_{list,request}\n * provenance_records_{list,record}\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject, PaginationArgs, buildPagination } from './shared.js';\n\nexport function registerInnovationTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── digital_twins_list ────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'digital_twins_list')),\n {\n title: 'List Digital Twins',\n description: 'List asset digital twins with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n digitalTwins: Array<Record<string, unknown>>;\n }>(ops.LIST_DIGITAL_TWINS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.digitalTwins);\n } catch (error) {\n ctx.logger.error('assethandler digital_twins_list failed', { error: String(error) });\n return errorResult(\n `Failed to list digital twins: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── digital_twins_create ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'digital_twins_create')),\n {\n title: 'Create Digital Twin',\n description:\n 'Create a digital twin for an asset. `assetId`, `fidelityLevel`, and `modelRef` are required.',\n inputSchema: {\n assetId: z.string().min(1).describe('Asset ID this twin models'),\n fidelityLevel: z.string().min(1).describe('Fidelity level (e.g. low, medium, high)'),\n modelRef: z.string().min(1).describe('Reference/URI of the 3D/simulation model'),\n geometryRef: z.string().optional().describe('Reference/URI of the geometry asset'),\n properties: JsonObject.optional().describe('Arbitrary twin property JSON'),\n },\n },\n async ({ assetId, fidelityLevel, modelRef, geometryRef, properties }) => {\n try {\n const input: Record<string, unknown> = { assetId, fidelityLevel, modelRef };\n if (geometryRef !== undefined) input.geometryRef = geometryRef;\n if (properties !== undefined) input.properties = properties;\n\n const data = await ctx.gql.workspace.request<{\n createDigitalTwin: Record<string, unknown>;\n }>(ops.CREATE_DIGITAL_TWIN, { input });\n return jsonResult(data.createDigitalTwin);\n } catch (error) {\n ctx.logger.error('assethandler digital_twins_create failed', { error: String(error) });\n return errorResult(\n `Failed to create digital twin: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── iot_list ──────────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'iot_list')),\n {\n title: 'List IoT Devices',\n description: 'List registered IoT devices with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n iotDevices: Array<Record<string, unknown>>;\n }>(ops.LIST_IOT_DEVICES, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.iotDevices);\n } catch (error) {\n ctx.logger.error('assethandler iot_list failed', { error: String(error) });\n return errorResult(\n `Failed to list IoT devices: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── iot_register ──────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'iot_register')),\n {\n title: 'Register IoT Device',\n description:\n 'Register an IoT device. `deviceId`, `name`, `protocol`, and `type` are required; optionally link an asset.',\n inputSchema: {\n deviceId: z.string().min(1).describe('Stable device identifier'),\n name: z.string().min(1).describe('Device display name'),\n protocol: z.string().min(1).describe('Comms protocol (e.g. MQTT, CoAP, Modbus)'),\n type: z.string().min(1).describe('Device type (free-form)'),\n status: z.string().optional().describe('Initial status (free-form)'),\n assetId: z.string().optional().describe('Asset this device is attached to'),\n metadata: JsonObject.optional().describe('Arbitrary device metadata JSON'),\n },\n },\n async ({ deviceId, name, protocol, type, status, assetId, metadata }) => {\n try {\n const input: Record<string, unknown> = { deviceId, name, protocol, type };\n if (status !== undefined) input.status = status;\n if (assetId !== undefined) input.assetId = assetId;\n if (metadata !== undefined) input.metadata = metadata;\n\n const data = await ctx.gql.workspace.request<{\n registerIoTDevice: Record<string, unknown>;\n }>(ops.REGISTER_IOT_DEVICE, { input });\n return jsonResult(data.registerIoTDevice);\n } catch (error) {\n ctx.logger.error('assethandler iot_register failed', { error: String(error) });\n return errorResult(\n `Failed to register IoT device: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── predictions_list ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'predictions_list')),\n {\n title: 'List AI Predictions',\n description: 'List AI asset predictions with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n aiPredictions: Array<Record<string, unknown>>;\n }>(ops.LIST_AI_PREDICTIONS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.aiPredictions);\n } catch (error) {\n ctx.logger.error('assethandler predictions_list failed', { error: String(error) });\n return errorResult(\n `Failed to list AI predictions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── predictions_request ────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'predictions_request')),\n {\n title: 'Request AI Prediction',\n description:\n 'Request an AI prediction for an asset. `assetId` and `predictionType` are required; optionally supply a feature vector.',\n inputSchema: {\n assetId: z.string().min(1).describe('Asset ID to predict on'),\n predictionType: z\n .string()\n .min(1)\n .describe('Prediction type (e.g. failure, depreciation, utilization)'),\n featureVector: JsonObject.optional().describe('Optional feature-vector JSON'),\n },\n },\n async ({ assetId, predictionType, featureVector }) => {\n try {\n const input: Record<string, unknown> = { assetId, predictionType };\n if (featureVector !== undefined) input.featureVector = featureVector;\n\n const data = await ctx.gql.workspace.request<{\n requestAIPrediction: Record<string, unknown>;\n }>(ops.REQUEST_AI_PREDICTION, { input });\n return jsonResult(data.requestAIPrediction);\n } catch (error) {\n ctx.logger.error('assethandler predictions_request failed', { error: String(error) });\n return errorResult(\n `Failed to request AI prediction: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── provenance_list ───────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'provenance_list')),\n {\n title: 'List Provenance Records',\n description: 'List blockchain provenance-attestation records with cursor-based pagination.',\n inputSchema: { ...PaginationArgs },\n },\n async ({ limit, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n provenanceRecords: Array<Record<string, unknown>>;\n }>(ops.LIST_PROVENANCE_RECORDS, { pagination: buildPagination(limit, cursor) });\n return jsonResult(data.provenanceRecords);\n } catch (error) {\n ctx.logger.error('assethandler provenance_list failed', { error: String(error) });\n return errorResult(\n `Failed to list provenance records: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n // ── provenance_record ─────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'provenance_record')),\n {\n title: 'Record Provenance',\n description:\n 'Attest an asset provenance record on-chain. `assetId`, `chainNetwork`, and `hash` are required.',\n inputSchema: {\n assetId: z.string().min(1).describe('Asset ID being attested'),\n chainNetwork: z.string().min(1).describe('Chain network (e.g. ethereum, polygon)'),\n hash: z.string().min(1).describe('Attestation hash'),\n blockNumber: z.number().int().optional().describe('Block number'),\n txHash: z.string().optional().describe('Transaction hash'),\n metadata: JsonObject.optional().describe('Arbitrary attestation metadata JSON'),\n },\n },\n async ({ assetId, chainNetwork, hash, blockNumber, txHash, metadata }) => {\n try {\n const input: Record<string, unknown> = { assetId, chainNetwork, hash };\n if (blockNumber !== undefined) input.blockNumber = blockNumber;\n if (txHash !== undefined) input.txHash = txHash;\n if (metadata !== undefined) input.metadata = metadata;\n\n const data = await ctx.gql.workspace.request<{\n recordProvenance: Record<string, unknown>;\n }>(ops.RECORD_PROVENANCE, { input });\n return jsonResult(data.recordProvenance);\n } catch (error) {\n ctx.logger.error('assethandler provenance_record failed', { error: String(error) });\n return errorResult(\n `Failed to record provenance: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * AssetHandler analytics tool.\n *\n * Surface (1): dashboard_overview.\n *\n * NOTE: the backend schema exposes only the federation noops `_serviceHealth`\n * / `_serviceNoop` (no @public product health query), so this module\n * deliberately registers NO health tool — mirroring the \"add NO health tool\n * unless there is a real @public health field\" rule.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerAnalyticsTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n // ── dashboard_overview ───────────────────────────────────────────────────\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dashboard_overview')),\n {\n title: 'AssetHandler Dashboard Overview',\n description:\n 'Headline asset-management KPIs: total assets, total transactions, open incidents, and open work orders.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n dashboardOverview: Record<string, unknown>;\n }>(ops.DASHBOARD_OVERVIEW, {});\n return jsonResult(data.dashboardOverview);\n } catch (error) {\n ctx.logger.error('assethandler dashboard_overview failed', { error: String(error) });\n return errorResult(\n `Failed to get dashboard overview: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { DASHBOARD_OVERVIEW, LIST_ASSETS, LIST_INCIDENTS } from './operations.js';\n\n/**\n * Read-only AssetHandler MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n */\nexport function registerAssetHandlerResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const dashboardUri = track(mcpResourceUri(ctx.productName, 'dashboard'));\n const assetsUri = track(mcpResourceUri(ctx.productName, 'assets'));\n const incidentsUri = track(mcpResourceUri(ctx.productName, 'incidents'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'assethandler-schema',\n schemaUri,\n {\n title: 'AssetHandler Domain Schema',\n description:\n 'Overview of the AssetHandler enterprise-asset / ITSM / ITAM domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# AssetHandler Domain (Overview)\n\nEnterprise asset management + IT service management (ITSM) + IT asset\nmanagement (ITAM) platform.\n\n## Entities\n- Asset — the core asset register (category, condition, status, custom attributes)\n- SoftwareAsset — software-license assets (seats, compliance)\n- ConfigurationItem — CMDB configuration items\n- DiscoveryJob — automated asset-discovery runs\n- Incident / Problem / ChangeRequest — ITSM tickets\n- WorkOrder / MaintenanceRecord — maintenance management\n- KnowledgeArticle — knowledge base\n- AssetBudget / Transaction / Invoice — asset finance\n- ComplianceFramework / AssetSecurityPolicy / SecurityEvent — governance, risk & compliance\n- EsgMetric — ESG reporting\n- DigitalTwin / IoTDevice / AIPrediction / ProvenanceRecord — advanced (twins, IoT, AI, blockchain)\n\n## Enums (input-bearing)\n- AssetCondition: DAMAGED, EXCELLENT, FAIR, GOOD, POOR\n- AssetStatus: ACTIVE, DISPOSED, INACTIVE, MAINTENANCE, RETIRED\n- Priority: CRITICAL, HIGH, LOW, MEDIUM\n- KnowledgeArticleStatus: ARCHIVED, DRAFT, PUBLISHED\n- TransactionType: DISPOSAL, LEASE, MAINTENANCE, PURCHASE, TRANSFER\n- TransactionStatus: APPROVED, COMPLETED, PENDING, REJECTED\n- WorkOrderType: CORRECTIVE, EMERGENCY, PREDICTIVE, PREVENTIVE\n- WorkOrderStatus: APPROVED, CANCELLED, COMPLETED, DRAFT, IN_PROGRESS, SCHEDULED\n\n## Tool groups\nassets, service (ITSM), finance, governance, innovation, analytics.\nAll run against the WORKSPACE gateway (workspace-scoped). List tools use\ncursor-based pagination ({ limit, cursor }). There is no public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://dashboard — headline KPIs\n server.registerResource(\n 'assethandler-dashboard',\n dashboardUri,\n {\n title: 'AssetHandler Dashboard Overview',\n description:\n 'Live headline KPIs (total assets, total transactions, open incidents, open work orders).',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${dashboardUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ dashboardOverview: unknown }>(\n DASHBOARD_OVERVIEW,\n {},\n );\n return {\n contents: [\n {\n uri: dashboardUri,\n text: JSON.stringify(data.dashboardOverview, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: dashboardUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://assets — asset register\n server.registerResource(\n 'assethandler-assets',\n assetsUri,\n {\n title: 'AssetHandler Asset Register',\n description: 'The first 50 assets in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${assetsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ assets: unknown }>(LIST_ASSETS, {\n pagination: { limit: 50 },\n });\n return {\n contents: [\n {\n uri: assetsUri,\n text: JSON.stringify(data.assets, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: assetsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://incidents — open incident queue\n server.registerResource(\n 'assethandler-incidents',\n incidentsUri,\n {\n title: 'AssetHandler Incident Queue',\n description: 'The first 50 service incidents in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${incidentsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ incidents: unknown }>(LIST_INCIDENTS, {\n pagination: { limit: 50 },\n });\n return {\n contents: [\n {\n uri: incidentsUri,\n text: JSON.stringify(data.incidents, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: incidentsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * AssetHandler MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerAssetHandlerPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const onboardingName = track(mcpPromptName(p, 'asset-onboarding'));\n const opsName = track(mcpPromptName(p, 'itsm-ops'));\n\n // <product>-asset-onboarding — register an asset + supporting records\n server.registerPrompt(\n onboardingName,\n {\n title: 'Asset Onboarding',\n description:\n 'Guide for onboarding a new asset end to end: register the asset, attach a CMDB configuration item, optionally a digital twin / IoT device, and seed a maintenance/work-order baseline.',\n argsSchema: {\n name: z.string().optional().describe('Asset name'),\n category: z.string().optional().describe('Asset category'),\n },\n },\n ({ name, category }) => {\n ctx.logger.debug(`Prompt ${onboardingName} called`, { name, category });\n const nameNote = name ? `Use the asset name \"${name}\".` : 'Ask the user for the asset name.';\n const categoryNote = category\n ? `Use category \"${category}\".`\n : 'Help the user pick a category.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me onboard a new AssetHandler asset.\n\n1. **Register Asset**: Use ${p}_assets_create. ${nameNote} ${categoryNote} Provide a unique assetNumber; optionally set condition/status, serialNumber, locationName, assignedTo, tags, and customAttributes.\n2. **CMDB**: Use ${p}_configuration_upsert to register a matching configuration item (ciNumber, ciType, status) if the asset is an IT CI.\n3. **(Optional) Digital Twin**: Use ${p}_digital_twins_create with the new assetId, a fidelityLevel, and a modelRef.\n4. **(Optional) IoT Device**: Use ${p}_iot_register to attach a sensor/device (deviceId, name, protocol, type) to the asset.\n5. **Baseline Maintenance**: Use ${p}_work_orders_create (type=PREVENTIVE) to seed a preventive-maintenance work order.\n6. **Verify**: Use ${p}_assets_get to confirm the asset, then ${p}_assets_list to see it in the register.\n\nShow results at each step and confirm before creating downstream records.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-itsm-ops — daily IT service-management operations\n server.registerPrompt(\n opsName,\n {\n title: 'ITSM Operations',\n description:\n 'Daily IT service-management workflow: review KPIs, triage incidents, advance work orders, check problems/changes, and review compliance posture.',\n argsSchema: {\n focus: z\n .string()\n .optional()\n .describe('Optional area to focus on (incidents/maintenance/compliance)'),\n },\n },\n ({ focus }) => {\n ctx.logger.debug(`Prompt ${opsName} called`, { focus });\n const focusNote = focus ? `Focus this run on: ${focus}.` : 'Cover all areas below.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run daily AssetHandler ITSM operations. ${focusNote}\n\n1. **KPIs**: Use ${p}_dashboard_overview for headline numbers (assets, transactions, open incidents, open work orders).\n2. **Incident Triage**: Use ${p}_incidents_list to find open incidents; open new ones with ${p}_incidents_create as needed.\n3. **Problems & Changes**: Use ${p}_problems_list and ${p}_changes_list to review root-cause work and pending changes.\n4. **Maintenance**: Use ${p}_work_orders_list and ${p}_maintenance_list to check the maintenance backlog; create work orders with ${p}_work_orders_create.\n5. **Knowledge**: Use ${p}_knowledge_list; document recurring fixes with ${p}_knowledge_create.\n6. **Governance**: Use ${p}_compliance_frameworks, ${p}_security_policies, and ${p}_security_events to review compliance/security posture.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * AssetHandler module — domain module for the future-products ecosystem program.\n *\n * Covers every root field of wspace-assethandler-svc grouped into per-entity\n * sub-APIs across cohesive domains: assets (assets + software + CMDB +\n * discovery), service (ITSM: incidents/problems/changes/work-orders/\n * maintenance/knowledge), finance (budgets/transactions/invoices), governance\n * (compliance/security/ESG), innovation (digital-twins/IoT/AI/provenance), and\n * analytics. Mirrors the kadaikodi / crewfoundry modules' structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and the canonical tags\n * module's typing discipline.\n *\n * Backend: ~/products/wspace/assethandler/wspace-assethandler-svc/\n * (Hive service name `assethandler`). All operations run against the WORKSPACE\n * gateway. The schema exposes only the federation noops `_serviceHealth` /\n * `_serviceNoop` (no @public health field) — so NO health tool is registered.\n *\n * List queries use the backend's cursor-based `AssetHandlerPaginationInput`\n * ({ cursor, limit }).\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerAssetTools } from './tools/assets.js';\nimport { registerServiceTools } from './tools/service.js';\nimport { registerFinanceTools } from './tools/finance.js';\nimport { registerGovernanceTools } from './tools/governance.js';\nimport { registerInnovationTools } from './tools/innovation.js';\nimport { registerAnalyticsTools } from './tools/analytics.js';\nimport { registerAssetHandlerResources } from './resources.js';\nimport { registerAssetHandlerPrompts } from './prompts.js';\n\nconst assethandlerModule: McpModule = {\n id: 'assethandler',\n version: '0.0.1',\n displayName: 'AssetHandler',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerAssetTools(server, ctx, trackTool);\n registerServiceTools(server, ctx, trackTool);\n registerFinanceTools(server, ctx, trackTool);\n registerGovernanceTools(server, ctx, trackTool);\n registerInnovationTools(server, ctx, trackTool);\n registerAnalyticsTools(server, ctx, trackTool);\n\n registerAssetHandlerResources(server, ctx, trackResource);\n registerAssetHandlerPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default assethandlerModule;\n"]}