snow-flow 1.4.49 โ†’ 2.0.0

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 (595) hide show
  1. package/.claude/helpers/github-setup.sh +28 -0
  2. package/.claude/helpers/quick-start.sh +19 -0
  3. package/.claude/helpers/setup-mcp.sh +18 -0
  4. package/.claude/settings.local.json +33 -0
  5. package/.claude-flow/metrics/system-metrics.json +1992 -0
  6. package/.env.example +21 -0
  7. package/.roo/README.md +402 -0
  8. package/.roo/mcp-list.txt +257 -0
  9. package/.roo/mcp.json +32 -0
  10. package/.roo/workflows/basic-tdd.json +32 -0
  11. package/.roomodes +201 -0
  12. package/README.md +114 -628
  13. package/activate-mcp.sh +15 -0
  14. package/dist/cli.js.bak +2052 -0
  15. package/manual-register-mcp.js +134 -0
  16. package/mcp-wrapper.sh +12 -0
  17. package/package.json +2 -2
  18. package/scripts/create-env.js +6 -1
  19. package/scripts/reset-mcp-servers.js +246 -0
  20. package/scripts/update-version.js +31 -0
  21. package/src/agents/README.md +192 -0
  22. package/src/agents/base-agent.ts +251 -0
  23. package/src/agents/coordinator.ts +971 -0
  24. package/src/agents/index.ts +18 -0
  25. package/src/agents/queen-403-handler.ts +230 -0
  26. package/src/agents/queen-agent.ts +1399 -0
  27. package/src/agents/script-writer-agent.ts +769 -0
  28. package/src/agents/security-agent.ts +726 -0
  29. package/src/agents/widget-creator-agent.ts +568 -0
  30. package/src/api/error-handling.ts +1758 -0
  31. package/src/api/natural-language-mapper.ts +630 -0
  32. package/src/api/performance-optimizer.ts +891 -0
  33. package/src/api/transaction-manager.ts +754 -0
  34. package/src/cli/deploy-artifact.ts +304 -0
  35. package/src/cli/snow-flow-cli-integration.ts +434 -0
  36. package/src/cli.ts +4455 -0
  37. package/src/cli.ts.bak +5616 -0
  38. package/src/compliance/advanced-compliance-system.ts +1268 -0
  39. package/src/compliance/index.ts +19 -0
  40. package/src/config/snow-flow-config.ts +1019 -0
  41. package/src/documentation/index.ts +16 -0
  42. package/src/documentation/self-documenting-system.ts +1421 -0
  43. package/src/dynamic-version.ts +44 -0
  44. package/src/healing/index.ts +20 -0
  45. package/src/healing/self-healing-system.ts +1435 -0
  46. package/src/health/README.md +161 -0
  47. package/src/health/system-health.ts +995 -0
  48. package/src/index.ts +60 -0
  49. package/src/intelligence/acl-analyzer.ts +377 -0
  50. package/src/intelligence/auto-resolution-engine.ts +643 -0
  51. package/src/intelligence/gap-analysis-engine.ts +488 -0
  52. package/src/intelligence/manual-instructions-generator.ts +744 -0
  53. package/src/intelligence/mcp-coverage-analyzer.ts +708 -0
  54. package/src/intelligence/multi-pass-requirements-analyzer.ts +603 -0
  55. package/src/intelligence/performance-recommendations-engine.ts +1223 -0
  56. package/src/intelligence/requirements-analyzer.ts +1148 -0
  57. package/src/intelligence/task-analyzer.ts +628 -0
  58. package/src/managers/scope-manager.ts +555 -0
  59. package/src/mcp/advanced/servicenow-advanced-features-mcp.ts +16110 -0
  60. package/src/mcp/base-mcp-server.ts +660 -0
  61. package/src/mcp/http-transport-wrapper.ts +426 -0
  62. package/src/mcp/service-discovery-client.ts +312 -0
  63. package/src/mcp/servicenow-automation-mcp-refactored.ts +678 -0
  64. package/src/mcp/servicenow-automation-mcp.ts +838 -0
  65. package/src/mcp/servicenow-deployment-mcp-refactored.ts +1292 -0
  66. package/src/mcp/servicenow-deployment-mcp.ts +7244 -0
  67. package/src/mcp/servicenow-graph-memory-mcp-refactored.ts +721 -0
  68. package/src/mcp/servicenow-graph-memory-mcp.ts +832 -0
  69. package/src/mcp/servicenow-integration-mcp-refactored.ts +655 -0
  70. package/src/mcp/servicenow-integration-mcp.ts +819 -0
  71. package/src/mcp/servicenow-intelligent-mcp-refactored.ts +977 -0
  72. package/src/mcp/servicenow-intelligent-mcp.ts +4638 -0
  73. package/src/mcp/servicenow-mcp-server.ts +728 -0
  74. package/src/mcp/servicenow-memory-mcp.ts +474 -0
  75. package/src/mcp/servicenow-operations-mcp-refactored.ts +1995 -0
  76. package/src/mcp/servicenow-operations-mcp.ts +3384 -0
  77. package/src/mcp/servicenow-platform-development-mcp-refactored.ts +611 -0
  78. package/src/mcp/servicenow-platform-development-mcp.ts +970 -0
  79. package/src/mcp/servicenow-progressive-indexer.ts +370 -0
  80. package/src/mcp/servicenow-reporting-analytics-mcp-refactored.ts +695 -0
  81. package/src/mcp/servicenow-reporting-analytics-mcp.ts +1123 -0
  82. package/src/mcp/servicenow-security-compliance-mcp-refactored.ts +642 -0
  83. package/src/mcp/servicenow-security-compliance-mcp.ts +1157 -0
  84. package/src/mcp/servicenow-update-set-mcp-refactored.ts +751 -0
  85. package/src/mcp/servicenow-update-set-mcp.ts +811 -0
  86. package/src/mcp/shared/agent-context-provider.ts +365 -0
  87. package/src/mcp/shared/base-mcp-server.ts +2463 -0
  88. package/src/mcp/shared/mcp-memory-manager.ts +540 -0
  89. package/src/mcp/shared/mcp-resource-manager.ts +367 -0
  90. package/src/mcp/snow-flow-mcp.ts +911 -0
  91. package/src/mcp/start-all-mcp-servers.ts +102 -0
  92. package/src/mcp/start-servicenow-mcp.ts +67 -0
  93. package/src/monitoring/enhanced-monitoring-system.ts +1345 -0
  94. package/src/monitoring/performance-tracker.ts +777 -0
  95. package/src/optimization/cost-optimization-engine.ts +1125 -0
  96. package/src/optimization/index.ts +10 -0
  97. package/src/queen/README.md +403 -0
  98. package/src/queen/agent-factory.ts +574 -0
  99. package/src/queen/index.ts +94 -0
  100. package/src/queen/mcp-execution-bridge.ts +681 -0
  101. package/src/queen/neural-learning.ts +319 -0
  102. package/src/queen/parallel-agent-engine.ts +848 -0
  103. package/src/queen/queen-memory-system.ts +490 -0
  104. package/src/queen/queen-memory.ts +456 -0
  105. package/src/queen/servicenow-queen.ts +1029 -0
  106. package/src/queen/types.ts +87 -0
  107. package/src/rollback/smart-rollback-system.ts +866 -0
  108. package/src/schemas/deployment.schema.json +58 -0
  109. package/src/schemas/flow.schema.json +79 -0
  110. package/src/schemas/widget.schema.json +72 -0
  111. package/src/snow-flow-system.ts +541 -0
  112. package/src/sparc/sparc-help.ts +49 -0
  113. package/src/sparc/team-sparc.ts +88 -0
  114. package/src/strategies/global-scope-strategy.ts +736 -0
  115. package/src/templates/base/application.template.json +45 -0
  116. package/src/templates/base/business_rule.template.json +33 -0
  117. package/src/templates/base/script_include.template.json +18 -0
  118. package/src/templates/base/table.template.json +64 -0
  119. package/src/templates/base/widget.template.json +25 -0
  120. package/src/templates/patterns/composite.incident-management.template.json +140 -0
  121. package/src/templates/patterns/widget.dashboard.template.json +238 -0
  122. package/src/templates/patterns/widget.datatable.template.json +292 -0
  123. package/src/testing/integration-test-suite.ts +1276 -0
  124. package/src/types/index.ts +183 -0
  125. package/src/types/neo4j-driver.d.ts +23 -0
  126. package/src/types/servicenow.types.ts +307 -0
  127. package/src/types/snow-flow.types.ts +186 -0
  128. package/src/types/todo.types.ts +70 -0
  129. package/src/utils/action-type-cache.ts +286 -0
  130. package/src/utils/agent-detector.ts +573 -0
  131. package/src/utils/artifact-tracker.ts +379 -0
  132. package/src/utils/dependency-detector.ts +233 -0
  133. package/src/utils/deployment-metadata-handler.ts +518 -0
  134. package/src/utils/error-recovery.ts +680 -0
  135. package/src/utils/logger.ts +60 -0
  136. package/src/utils/mcp-auth-middleware.ts +262 -0
  137. package/src/utils/mcp-config-manager.ts +270 -0
  138. package/src/utils/mcp-server-manager.ts +446 -0
  139. package/src/utils/mcp-tool-registry.ts +298 -0
  140. package/src/utils/migrate-snow-flow.ts +98 -0
  141. package/src/utils/oauth-html-templates.ts +188 -0
  142. package/src/utils/scope-utils.ts +443 -0
  143. package/src/utils/servicenow-client.ts +3321 -0
  144. package/src/utils/servicenow-id-generator.ts +181 -0
  145. package/src/utils/snow-memory-manager.ts +605 -0
  146. package/src/utils/snow-oauth.ts +797 -0
  147. package/src/utils/template-engine.ts +463 -0
  148. package/src/utils/theme-manager.ts +295 -0
  149. package/src/utils/unified-auth-store.ts +222 -0
  150. package/src/utils/update-set-importer.ts +422 -0
  151. package/src/utils/update-set-xml-packager.ts +371 -0
  152. package/src/utils/widget-template-generator.ts +1744 -0
  153. package/src/version.ts +1950 -0
  154. package/.claude/commands/memory/README.md +0 -9
  155. package/dist/agents/app-creator.agent.d.ts.map +0 -1
  156. package/dist/agents/app-creator.agent.js.map +0 -1
  157. package/dist/agents/base/base-snow-agent.d.ts.map +0 -1
  158. package/dist/agents/base/base-snow-agent.js.map +0 -1
  159. package/dist/agents/base-agent.d.ts.map +0 -1
  160. package/dist/agents/base-agent.js.map +0 -1
  161. package/dist/agents/base-snow-agent.d.ts.map +0 -1
  162. package/dist/agents/base-snow-agent.js.map +0 -1
  163. package/dist/agents/coordinator.d.ts.map +0 -1
  164. package/dist/agents/coordinator.js.map +0 -1
  165. package/dist/agents/flow-builder-agent.d.ts.map +0 -1
  166. package/dist/agents/flow-builder-agent.js.map +0 -1
  167. package/dist/agents/index.d.ts.map +0 -1
  168. package/dist/agents/index.js.map +0 -1
  169. package/dist/agents/queen-403-handler.d.ts.map +0 -1
  170. package/dist/agents/queen-403-handler.js.map +0 -1
  171. package/dist/agents/queen-agent-example.d.ts.map +0 -1
  172. package/dist/agents/queen-agent-example.js.map +0 -1
  173. package/dist/agents/queen-agent.d.ts.map +0 -1
  174. package/dist/agents/queen-agent.js.map +0 -1
  175. package/dist/agents/queen-agent.test.d.ts.map +0 -1
  176. package/dist/agents/queen-agent.test.js.map +0 -1
  177. package/dist/agents/script-generator.agent.d.ts.map +0 -1
  178. package/dist/agents/script-generator.agent.js.map +0 -1
  179. package/dist/agents/script-writer-agent.d.ts.map +0 -1
  180. package/dist/agents/script-writer-agent.js.map +0 -1
  181. package/dist/agents/security-agent.d.ts.map +0 -1
  182. package/dist/agents/security-agent.js.map +0 -1
  183. package/dist/agents/specialists/automation-specialist.agent.d.ts.map +0 -1
  184. package/dist/agents/specialists/automation-specialist.agent.js.map +0 -1
  185. package/dist/agents/specialists/data-specialist.agent.d.ts.map +0 -1
  186. package/dist/agents/specialists/data-specialist.agent.js.map +0 -1
  187. package/dist/agents/specialists/integration-specialist.agent.d.ts.map +0 -1
  188. package/dist/agents/specialists/integration-specialist.agent.js.map +0 -1
  189. package/dist/agents/specialists/reporting-specialist.agent.d.ts.map +0 -1
  190. package/dist/agents/specialists/reporting-specialist.agent.js.map +0 -1
  191. package/dist/agents/specialists/security-specialist.agent.d.ts.map +0 -1
  192. package/dist/agents/specialists/security-specialist.agent.js.map +0 -1
  193. package/dist/agents/teams/adaptive/adaptive-coordinator.agent.d.ts.map +0 -1
  194. package/dist/agents/teams/adaptive/adaptive-coordinator.agent.js.map +0 -1
  195. package/dist/agents/teams/base-team.d.ts.map +0 -1
  196. package/dist/agents/teams/base-team.js.map +0 -1
  197. package/dist/agents/teams/team-types.d.ts.map +0 -1
  198. package/dist/agents/teams/team-types.js.map +0 -1
  199. package/dist/agents/teams/widget/widget-architect.agent.d.ts.map +0 -1
  200. package/dist/agents/teams/widget/widget-architect.agent.js.map +0 -1
  201. package/dist/agents/teams/widget/widget-backend.agent.d.ts.map +0 -1
  202. package/dist/agents/teams/widget/widget-backend.agent.js.map +0 -1
  203. package/dist/agents/teams/widget/widget-frontend.agent.d.ts.map +0 -1
  204. package/dist/agents/teams/widget/widget-frontend.agent.js.map +0 -1
  205. package/dist/agents/teams/widget/widget-platform.agent.d.ts.map +0 -1
  206. package/dist/agents/teams/widget/widget-platform.agent.js.map +0 -1
  207. package/dist/agents/teams/widget/widget-uiux.agent.d.ts.map +0 -1
  208. package/dist/agents/teams/widget/widget-uiux.agent.js.map +0 -1
  209. package/dist/agents/test-agent.d.ts.map +0 -1
  210. package/dist/agents/test-agent.js.map +0 -1
  211. package/dist/agents/test-agents.d.ts.map +0 -1
  212. package/dist/agents/test-agents.js.map +0 -1
  213. package/dist/agents/ui-builder.agent.d.ts.map +0 -1
  214. package/dist/agents/ui-builder.agent.js.map +0 -1
  215. package/dist/agents/widget-builder.agent.d.ts.map +0 -1
  216. package/dist/agents/widget-builder.agent.js.map +0 -1
  217. package/dist/agents/widget-creator-agent.d.ts.map +0 -1
  218. package/dist/agents/widget-creator-agent.js.map +0 -1
  219. package/dist/agents/workflow-designer.agent.d.ts.map +0 -1
  220. package/dist/agents/workflow-designer.agent.js.map +0 -1
  221. package/dist/api/error-handling.d.ts.map +0 -1
  222. package/dist/api/error-handling.js.map +0 -1
  223. package/dist/api/flow-designer-api.d.ts.map +0 -1
  224. package/dist/api/flow-designer-api.js.map +0 -1
  225. package/dist/api/natural-language-mapper.d.ts.map +0 -1
  226. package/dist/api/natural-language-mapper.js.map +0 -1
  227. package/dist/api/performance-optimizer.d.ts.map +0 -1
  228. package/dist/api/performance-optimizer.js.map +0 -1
  229. package/dist/api/transaction-manager.d.ts.map +0 -1
  230. package/dist/api/transaction-manager.js.map +0 -1
  231. package/dist/assembly/team-assembler.d.ts.map +0 -1
  232. package/dist/assembly/team-assembler.js.map +0 -1
  233. package/dist/cli/deploy-artifact.d.ts.map +0 -1
  234. package/dist/cli/deploy-artifact.js.map +0 -1
  235. package/dist/cli/snow-flow-cli-integration.d.ts.map +0 -1
  236. package/dist/cli/snow-flow-cli-integration.js.map +0 -1
  237. package/dist/cli.d.ts.map +0 -1
  238. package/dist/cli.js.map +0 -1
  239. package/dist/compliance/advanced-compliance-system.d.ts.map +0 -1
  240. package/dist/compliance/advanced-compliance-system.js.map +0 -1
  241. package/dist/compliance/index.d.ts.map +0 -1
  242. package/dist/compliance/index.js.map +0 -1
  243. package/dist/config/snow-flow-config.d.ts.map +0 -1
  244. package/dist/config/snow-flow-config.js.map +0 -1
  245. package/dist/documentation/index.d.ts.map +0 -1
  246. package/dist/documentation/index.js.map +0 -1
  247. package/dist/documentation/self-documenting-system.d.ts.map +0 -1
  248. package/dist/documentation/self-documenting-system.js.map +0 -1
  249. package/dist/dynamic-version.d.ts.map +0 -1
  250. package/dist/dynamic-version.js.map +0 -1
  251. package/dist/healing/index.d.ts.map +0 -1
  252. package/dist/healing/index.js.map +0 -1
  253. package/dist/healing/self-healing-system.d.ts.map +0 -1
  254. package/dist/healing/self-healing-system.js.map +0 -1
  255. package/dist/health/system-health.d.ts.map +0 -1
  256. package/dist/health/system-health.js.map +0 -1
  257. package/dist/index.d.ts.map +0 -1
  258. package/dist/index.js.map +0 -1
  259. package/dist/intelligence/acl-analyzer.d.ts.map +0 -1
  260. package/dist/intelligence/acl-analyzer.js.map +0 -1
  261. package/dist/intelligence/auto-resolution-engine.d.ts.map +0 -1
  262. package/dist/intelligence/auto-resolution-engine.js.map +0 -1
  263. package/dist/intelligence/gap-analysis-engine.d.ts.map +0 -1
  264. package/dist/intelligence/gap-analysis-engine.js.map +0 -1
  265. package/dist/intelligence/manual-instructions-generator.d.ts.map +0 -1
  266. package/dist/intelligence/manual-instructions-generator.js.map +0 -1
  267. package/dist/intelligence/mcp-coverage-analyzer.d.ts.map +0 -1
  268. package/dist/intelligence/mcp-coverage-analyzer.js.map +0 -1
  269. package/dist/intelligence/multi-pass-requirements-analyzer.d.ts.map +0 -1
  270. package/dist/intelligence/multi-pass-requirements-analyzer.js.map +0 -1
  271. package/dist/intelligence/performance-recommendations-engine.d.ts.map +0 -1
  272. package/dist/intelligence/performance-recommendations-engine.js.map +0 -1
  273. package/dist/intelligence/requirements-analyzer.d.ts.map +0 -1
  274. package/dist/intelligence/requirements-analyzer.js.map +0 -1
  275. package/dist/intelligence/task-analyzer.d.ts.map +0 -1
  276. package/dist/intelligence/task-analyzer.js.map +0 -1
  277. package/dist/managers/scope-manager.d.ts.map +0 -1
  278. package/dist/managers/scope-manager.js.map +0 -1
  279. package/dist/mcp/advanced/servicenow-advanced-features-mcp.d.ts.map +0 -1
  280. package/dist/mcp/advanced/servicenow-advanced-features-mcp.js.map +0 -1
  281. package/dist/mcp/base-mcp-server.d.ts.map +0 -1
  282. package/dist/mcp/base-mcp-server.js.map +0 -1
  283. package/dist/mcp/example-refactored-server.d.ts.map +0 -1
  284. package/dist/mcp/example-refactored-server.js.map +0 -1
  285. package/dist/mcp/http-transport-wrapper.d.ts.map +0 -1
  286. package/dist/mcp/http-transport-wrapper.js.map +0 -1
  287. package/dist/mcp/mcp-wrapper.d.ts.map +0 -1
  288. package/dist/mcp/mcp-wrapper.js.map +0 -1
  289. package/dist/mcp/service-discovery-client.d.ts.map +0 -1
  290. package/dist/mcp/service-discovery-client.js.map +0 -1
  291. package/dist/mcp/servicenow-automation-mcp-refactored.d.ts.map +0 -1
  292. package/dist/mcp/servicenow-automation-mcp-refactored.js.map +0 -1
  293. package/dist/mcp/servicenow-automation-mcp.d.ts.map +0 -1
  294. package/dist/mcp/servicenow-automation-mcp.js.map +0 -1
  295. package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts.map +0 -1
  296. package/dist/mcp/servicenow-deployment-mcp-refactored.js.map +0 -1
  297. package/dist/mcp/servicenow-deployment-mcp.d.ts.map +0 -1
  298. package/dist/mcp/servicenow-deployment-mcp.js.map +0 -1
  299. package/dist/mcp/servicenow-flow-composer-mcp-refactored.d.ts.map +0 -1
  300. package/dist/mcp/servicenow-flow-composer-mcp-refactored.js.map +0 -1
  301. package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +0 -1
  302. package/dist/mcp/servicenow-flow-composer-mcp.js.map +0 -1
  303. package/dist/mcp/servicenow-graph-memory-mcp-refactored.d.ts.map +0 -1
  304. package/dist/mcp/servicenow-graph-memory-mcp-refactored.js.map +0 -1
  305. package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +0 -1
  306. package/dist/mcp/servicenow-graph-memory-mcp.js.map +0 -1
  307. package/dist/mcp/servicenow-integration-mcp-refactored.d.ts.map +0 -1
  308. package/dist/mcp/servicenow-integration-mcp-refactored.js.map +0 -1
  309. package/dist/mcp/servicenow-integration-mcp.d.ts.map +0 -1
  310. package/dist/mcp/servicenow-integration-mcp.js.map +0 -1
  311. package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts.map +0 -1
  312. package/dist/mcp/servicenow-intelligent-mcp-refactored.js.map +0 -1
  313. package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +0 -1
  314. package/dist/mcp/servicenow-intelligent-mcp.js.map +0 -1
  315. package/dist/mcp/servicenow-mcp-server.d.ts.map +0 -1
  316. package/dist/mcp/servicenow-mcp-server.js.map +0 -1
  317. package/dist/mcp/servicenow-memory-mcp.d.ts.map +0 -1
  318. package/dist/mcp/servicenow-memory-mcp.js.map +0 -1
  319. package/dist/mcp/servicenow-operations-mcp-refactored.d.ts.map +0 -1
  320. package/dist/mcp/servicenow-operations-mcp-refactored.js.map +0 -1
  321. package/dist/mcp/servicenow-operations-mcp.d.ts.map +0 -1
  322. package/dist/mcp/servicenow-operations-mcp.js.map +0 -1
  323. package/dist/mcp/servicenow-platform-development-mcp-refactored.d.ts.map +0 -1
  324. package/dist/mcp/servicenow-platform-development-mcp-refactored.js.map +0 -1
  325. package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +0 -1
  326. package/dist/mcp/servicenow-platform-development-mcp.js.map +0 -1
  327. package/dist/mcp/servicenow-progressive-indexer.d.ts.map +0 -1
  328. package/dist/mcp/servicenow-progressive-indexer.js.map +0 -1
  329. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.d.ts.map +0 -1
  330. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.js.map +0 -1
  331. package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +0 -1
  332. package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +0 -1
  333. package/dist/mcp/servicenow-security-compliance-mcp-refactored.d.ts.map +0 -1
  334. package/dist/mcp/servicenow-security-compliance-mcp-refactored.js.map +0 -1
  335. package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +0 -1
  336. package/dist/mcp/servicenow-security-compliance-mcp.js.map +0 -1
  337. package/dist/mcp/servicenow-update-set-mcp-refactored.d.ts.map +0 -1
  338. package/dist/mcp/servicenow-update-set-mcp-refactored.js.map +0 -1
  339. package/dist/mcp/servicenow-update-set-mcp.d.ts.map +0 -1
  340. package/dist/mcp/servicenow-update-set-mcp.js.map +0 -1
  341. package/dist/mcp/servicenow-xml-flow-mcp.d.ts.map +0 -1
  342. package/dist/mcp/servicenow-xml-flow-mcp.js.map +0 -1
  343. package/dist/mcp/shared/agent-context-provider.d.ts.map +0 -1
  344. package/dist/mcp/shared/agent-context-provider.js.map +0 -1
  345. package/dist/mcp/shared/base-mcp-server.d.ts.map +0 -1
  346. package/dist/mcp/shared/base-mcp-server.js.map +0 -1
  347. package/dist/mcp/shared/mcp-memory-manager.d.ts.map +0 -1
  348. package/dist/mcp/shared/mcp-memory-manager.js.map +0 -1
  349. package/dist/mcp/shared/mcp-resource-manager.d.ts.map +0 -1
  350. package/dist/mcp/shared/mcp-resource-manager.js.map +0 -1
  351. package/dist/mcp/snow-flow-mcp.d.ts.map +0 -1
  352. package/dist/mcp/snow-flow-mcp.js.map +0 -1
  353. package/dist/mcp/start-all-mcp-servers.d.ts.map +0 -1
  354. package/dist/mcp/start-all-mcp-servers.js.map +0 -1
  355. package/dist/mcp/start-servicenow-mcp.d.ts.map +0 -1
  356. package/dist/mcp/start-servicenow-mcp.js.map +0 -1
  357. package/dist/mcp/test-simple-mcp.d.ts.map +0 -1
  358. package/dist/mcp/test-simple-mcp.js.map +0 -1
  359. package/dist/memory/hierarchical-memory-system.d.ts +0 -90
  360. package/dist/memory/hierarchical-memory-system.d.ts.map +0 -1
  361. package/dist/memory/hierarchical-memory-system.js +0 -400
  362. package/dist/memory/hierarchical-memory-system.js.map +0 -1
  363. package/dist/memory/index.d.ts +0 -9
  364. package/dist/memory/index.d.ts.map +0 -1
  365. package/dist/memory/index.js +0 -20
  366. package/dist/memory/index.js.map +0 -1
  367. package/dist/memory/mcp-integration-example.d.ts +0 -6
  368. package/dist/memory/mcp-integration-example.d.ts.map +0 -1
  369. package/dist/memory/mcp-integration-example.js +0 -281
  370. package/dist/memory/mcp-integration-example.js.map +0 -1
  371. package/dist/memory/memory-client.d.ts +0 -199
  372. package/dist/memory/memory-client.d.ts.map +0 -1
  373. package/dist/memory/memory-client.js +0 -364
  374. package/dist/memory/memory-client.js.map +0 -1
  375. package/dist/memory/memory-manager.d.ts +0 -29
  376. package/dist/memory/memory-manager.d.ts.map +0 -1
  377. package/dist/memory/memory-manager.js +0 -280
  378. package/dist/memory/memory-manager.js.map +0 -1
  379. package/dist/memory/memory-operations.d.ts +0 -179
  380. package/dist/memory/memory-operations.d.ts.map +0 -1
  381. package/dist/memory/memory-operations.js +0 -691
  382. package/dist/memory/memory-operations.js.map +0 -1
  383. package/dist/memory/memory-system.d.ts +0 -152
  384. package/dist/memory/memory-system.d.ts.map +0 -1
  385. package/dist/memory/memory-system.js +0 -632
  386. package/dist/memory/memory-system.js.map +0 -1
  387. package/dist/memory/memory-test.d.ts +0 -6
  388. package/dist/memory/memory-test.d.ts.map +0 -1
  389. package/dist/memory/memory-test.js +0 -161
  390. package/dist/memory/memory-test.js.map +0 -1
  391. package/dist/memory/servicenow-artifact-indexer.d.ts +0 -119
  392. package/dist/memory/servicenow-artifact-indexer.d.ts.map +0 -1
  393. package/dist/memory/servicenow-artifact-indexer.js +0 -560
  394. package/dist/memory/servicenow-artifact-indexer.js.map +0 -1
  395. package/dist/memory/snow-flow-memory-patterns.d.ts +0 -213
  396. package/dist/memory/snow-flow-memory-patterns.d.ts.map +0 -1
  397. package/dist/memory/snow-flow-memory-patterns.js +0 -200
  398. package/dist/memory/snow-flow-memory-patterns.js.map +0 -1
  399. package/dist/memory/snow-memory.d.ts +0 -54
  400. package/dist/memory/snow-memory.d.ts.map +0 -1
  401. package/dist/memory/snow-memory.js +0 -301
  402. package/dist/memory/snow-memory.js.map +0 -1
  403. package/dist/memory/swarm-memory.d.ts +0 -135
  404. package/dist/memory/swarm-memory.d.ts.map +0 -1
  405. package/dist/memory/swarm-memory.js +0 -378
  406. package/dist/memory/swarm-memory.js.map +0 -1
  407. package/dist/monitoring/enhanced-monitoring-system.d.ts.map +0 -1
  408. package/dist/monitoring/enhanced-monitoring-system.js.map +0 -1
  409. package/dist/monitoring/performance-tracker.d.ts.map +0 -1
  410. package/dist/monitoring/performance-tracker.js.map +0 -1
  411. package/dist/optimization/cost-optimization-engine.d.ts.map +0 -1
  412. package/dist/optimization/cost-optimization-engine.js.map +0 -1
  413. package/dist/optimization/index.d.ts.map +0 -1
  414. package/dist/optimization/index.js.map +0 -1
  415. package/dist/orchestration/discovery/service-discovery.d.ts.map +0 -1
  416. package/dist/orchestration/discovery/service-discovery.js.map +0 -1
  417. package/dist/orchestration/distributed-orchestrator.d.ts.map +0 -1
  418. package/dist/orchestration/distributed-orchestrator.js.map +0 -1
  419. package/dist/orchestration/distribution/task-distribution-engine.d.ts.map +0 -1
  420. package/dist/orchestration/distribution/task-distribution-engine.js.map +0 -1
  421. package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts.map +0 -1
  422. package/dist/orchestration/interfaces/distributed-orchestration.interface.js.map +0 -1
  423. package/dist/orchestration/protocols/mcpx-protocol.d.ts.map +0 -1
  424. package/dist/orchestration/protocols/mcpx-protocol.js.map +0 -1
  425. package/dist/orchestration/state/distributed-state-manager.d.ts.map +0 -1
  426. package/dist/orchestration/state/distributed-state-manager.js.map +0 -1
  427. package/dist/orchestrator/flow-composer.d.ts.map +0 -1
  428. package/dist/orchestrator/flow-composer.js.map +0 -1
  429. package/dist/orchestrator/flow-pattern-templates.d.ts.map +0 -1
  430. package/dist/orchestrator/flow-pattern-templates.js.map +0 -1
  431. package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +0 -1
  432. package/dist/orchestrator/flow-subflow-decision-engine.js.map +0 -1
  433. package/dist/orchestrator/flow-validation-engine.d.ts.map +0 -1
  434. package/dist/orchestrator/flow-validation-engine.js.map +0 -1
  435. package/dist/orchestrator/snow-orchestrator.d.ts.map +0 -1
  436. package/dist/orchestrator/snow-orchestrator.js.map +0 -1
  437. package/dist/orchestrator/subflow-creation-handler.d.ts.map +0 -1
  438. package/dist/orchestrator/subflow-creation-handler.js.map +0 -1
  439. package/dist/patterns/adaptive-patterns.d.ts.map +0 -1
  440. package/dist/patterns/adaptive-patterns.js.map +0 -1
  441. package/dist/queen/advanced-integration-test.d.ts.map +0 -1
  442. package/dist/queen/advanced-integration-test.js.map +0 -1
  443. package/dist/queen/agent-factory.d.ts.map +0 -1
  444. package/dist/queen/agent-factory.js.map +0 -1
  445. package/dist/queen/index.d.ts.map +0 -1
  446. package/dist/queen/index.js.map +0 -1
  447. package/dist/queen/integration-example.d.ts.map +0 -1
  448. package/dist/queen/integration-example.js.map +0 -1
  449. package/dist/queen/integration-test.d.ts.map +0 -1
  450. package/dist/queen/integration-test.js.map +0 -1
  451. package/dist/queen/mcp-execution-bridge.d.ts.map +0 -1
  452. package/dist/queen/mcp-execution-bridge.js.map +0 -1
  453. package/dist/queen/mock-mcp-client.d.ts.map +0 -1
  454. package/dist/queen/mock-mcp-client.js.map +0 -1
  455. package/dist/queen/neural-learning.d.ts.map +0 -1
  456. package/dist/queen/neural-learning.js.map +0 -1
  457. package/dist/queen/parallel-agent-engine.d.ts.map +0 -1
  458. package/dist/queen/parallel-agent-engine.js.map +0 -1
  459. package/dist/queen/queen-memory-system.d.ts.map +0 -1
  460. package/dist/queen/queen-memory-system.js.map +0 -1
  461. package/dist/queen/queen-memory.d.ts.map +0 -1
  462. package/dist/queen/queen-memory.js.map +0 -1
  463. package/dist/queen/run-integration-tests.d.ts.map +0 -1
  464. package/dist/queen/run-integration-tests.js.map +0 -1
  465. package/dist/queen/servicenow-queen.d.ts.map +0 -1
  466. package/dist/queen/servicenow-queen.js.map +0 -1
  467. package/dist/queen/types.d.ts.map +0 -1
  468. package/dist/queen/types.js.map +0 -1
  469. package/dist/rollback/smart-rollback-system.d.ts.map +0 -1
  470. package/dist/rollback/smart-rollback-system.js.map +0 -1
  471. package/dist/snow-flow-system.d.ts.map +0 -1
  472. package/dist/snow-flow-system.js.map +0 -1
  473. package/dist/sparc/coordinators/adaptive-coordinator.d.ts.map +0 -1
  474. package/dist/sparc/coordinators/adaptive-coordinator.js.map +0 -1
  475. package/dist/sparc/coordinators/team-coordinator.d.ts.map +0 -1
  476. package/dist/sparc/coordinators/team-coordinator.js.map +0 -1
  477. package/dist/sparc/modes/team-modes.d.ts.map +0 -1
  478. package/dist/sparc/modes/team-modes.js.map +0 -1
  479. package/dist/sparc/sparc-help.d.ts.map +0 -1
  480. package/dist/sparc/sparc-help.js.map +0 -1
  481. package/dist/sparc/team-sparc.d.ts.map +0 -1
  482. package/dist/sparc/team-sparc.js.map +0 -1
  483. package/dist/sparc/teams/application-team.d.ts.map +0 -1
  484. package/dist/sparc/teams/application-team.js.map +0 -1
  485. package/dist/sparc/teams/flow-team.d.ts.map +0 -1
  486. package/dist/sparc/teams/flow-team.js.map +0 -1
  487. package/dist/sparc/teams/widget-team.d.ts.map +0 -1
  488. package/dist/sparc/teams/widget-team.js.map +0 -1
  489. package/dist/specialists/app-specialists.d.ts.map +0 -1
  490. package/dist/specialists/app-specialists.js.map +0 -1
  491. package/dist/specialists/base-specialist.d.ts.map +0 -1
  492. package/dist/specialists/base-specialist.js.map +0 -1
  493. package/dist/specialists/flow-specialists.d.ts.map +0 -1
  494. package/dist/specialists/flow-specialists.js.map +0 -1
  495. package/dist/specialists/individual-specialists.d.ts.map +0 -1
  496. package/dist/specialists/individual-specialists.js.map +0 -1
  497. package/dist/specialists/widget-specialists.d.ts.map +0 -1
  498. package/dist/specialists/widget-specialists.js.map +0 -1
  499. package/dist/strategies/global-scope-strategy.d.ts.map +0 -1
  500. package/dist/strategies/global-scope-strategy.js.map +0 -1
  501. package/dist/teams/adaptive-team.d.ts.map +0 -1
  502. package/dist/teams/adaptive-team.js.map +0 -1
  503. package/dist/teams/application-team.d.ts.map +0 -1
  504. package/dist/teams/application-team.js.map +0 -1
  505. package/dist/teams/base-team.d.ts.map +0 -1
  506. package/dist/teams/base-team.js.map +0 -1
  507. package/dist/teams/flow-team.d.ts.map +0 -1
  508. package/dist/teams/flow-team.js.map +0 -1
  509. package/dist/teams/widget-team.d.ts.map +0 -1
  510. package/dist/teams/widget-team.js.map +0 -1
  511. package/dist/testing/integration-test-suite.d.ts.map +0 -1
  512. package/dist/testing/integration-test-suite.js.map +0 -1
  513. package/dist/types/index.d.ts.map +0 -1
  514. package/dist/types/index.js.map +0 -1
  515. package/dist/types/servicenow.types.d.ts.map +0 -1
  516. package/dist/types/servicenow.types.js.map +0 -1
  517. package/dist/types/snow-flow.types.d.ts.map +0 -1
  518. package/dist/types/snow-flow.types.js.map +0 -1
  519. package/dist/types/todo.types.d.ts.map +0 -1
  520. package/dist/types/todo.types.js.map +0 -1
  521. package/dist/utils/action-type-cache.d.ts.map +0 -1
  522. package/dist/utils/action-type-cache.js.map +0 -1
  523. package/dist/utils/agent-detector.d.ts.map +0 -1
  524. package/dist/utils/agent-detector.js.map +0 -1
  525. package/dist/utils/artifact-tracker.d.ts.map +0 -1
  526. package/dist/utils/artifact-tracker.js.map +0 -1
  527. package/dist/utils/dependency-detector.d.ts.map +0 -1
  528. package/dist/utils/dependency-detector.js.map +0 -1
  529. package/dist/utils/deployment-metadata-handler.d.ts.map +0 -1
  530. package/dist/utils/deployment-metadata-handler.js.map +0 -1
  531. package/dist/utils/error-recovery.d.ts.map +0 -1
  532. package/dist/utils/error-recovery.js.map +0 -1
  533. package/dist/utils/flow-api-discovery.d.ts.map +0 -1
  534. package/dist/utils/flow-api-discovery.js.map +0 -1
  535. package/dist/utils/flow-xml-generator.d.ts.map +0 -1
  536. package/dist/utils/flow-xml-generator.js.map +0 -1
  537. package/dist/utils/logger.d.ts.map +0 -1
  538. package/dist/utils/logger.js.map +0 -1
  539. package/dist/utils/mcp-auth-middleware.d.ts.map +0 -1
  540. package/dist/utils/mcp-auth-middleware.js.map +0 -1
  541. package/dist/utils/mcp-config-manager.d.ts.map +0 -1
  542. package/dist/utils/mcp-config-manager.js.map +0 -1
  543. package/dist/utils/mcp-server-manager.d.ts.map +0 -1
  544. package/dist/utils/mcp-server-manager.js.map +0 -1
  545. package/dist/utils/mcp-tool-registry.d.ts.map +0 -1
  546. package/dist/utils/mcp-tool-registry.js.map +0 -1
  547. package/dist/utils/migrate-claude-flow.d.ts.map +0 -1
  548. package/dist/utils/migrate-claude-flow.js.map +0 -1
  549. package/dist/utils/migrate-snow-flow.d.ts.map +0 -1
  550. package/dist/utils/migrate-snow-flow.js.map +0 -1
  551. package/dist/utils/oauth-html-templates.d.ts.map +0 -1
  552. package/dist/utils/oauth-html-templates.js.map +0 -1
  553. package/dist/utils/scope-utils.d.ts.map +0 -1
  554. package/dist/utils/scope-utils.js.map +0 -1
  555. package/dist/utils/servicenow-client.d.ts.map +0 -1
  556. package/dist/utils/servicenow-client.js.map +0 -1
  557. package/dist/utils/servicenow-id-generator.d.ts.map +0 -1
  558. package/dist/utils/servicenow-id-generator.js.map +0 -1
  559. package/dist/utils/snow-memory-manager.d.ts.map +0 -1
  560. package/dist/utils/snow-memory-manager.js.map +0 -1
  561. package/dist/utils/snow-oauth-old.d.ts.map +0 -1
  562. package/dist/utils/snow-oauth-old.js.map +0 -1
  563. package/dist/utils/snow-oauth.d.ts.map +0 -1
  564. package/dist/utils/snow-oauth.js.map +0 -1
  565. package/dist/utils/template-engine.d.ts.map +0 -1
  566. package/dist/utils/template-engine.js.map +0 -1
  567. package/dist/utils/theme-manager.d.ts.map +0 -1
  568. package/dist/utils/theme-manager.js.map +0 -1
  569. package/dist/utils/unified-auth-store.d.ts.map +0 -1
  570. package/dist/utils/unified-auth-store.js.map +0 -1
  571. package/dist/utils/update-set-importer.d.ts.map +0 -1
  572. package/dist/utils/update-set-importer.js.map +0 -1
  573. package/dist/utils/update-set-xml-packager.d.ts.map +0 -1
  574. package/dist/utils/update-set-xml-packager.js.map +0 -1
  575. package/dist/utils/widget-template-generator.d.ts.map +0 -1
  576. package/dist/utils/widget-template-generator.js.map +0 -1
  577. package/dist/version.d.ts.map +0 -1
  578. package/dist/version.js.map +0 -1
  579. package/memory/agents/README.md +0 -31
  580. package/memory/claude-flow-data.json +0 -5
  581. package/memory/servicenow_artifacts/000d9224c895221055906c7518aa2d3d.json +0 -30
  582. package/memory/servicenow_artifacts/0196b66173303010e46b4a2214f6a7a2.json +0 -36
  583. package/memory/servicenow_artifacts/125e5d1d837e2a102a7ea130ceaad397.json +0 -30
  584. package/memory/servicenow_artifacts/7637c1f2b7112210a5e5911cde11a972.json +0 -30
  585. package/memory/servicenow_artifacts/default_documentation_tables_1754056582292.json +0 -55
  586. package/memory/servicenow_artifacts/default_documentation_tables_1754057477189.json +0 -55
  587. package/memory/sessions/README.md +0 -32
  588. package/memory/update-set-sessions/01f82af583faea102a7ea130ceaad3d4.json +0 -9
  589. package/memory/update-set-sessions/27718fb983faea102a7ea130ceaad34b.json +0 -9
  590. package/memory/update-set-sessions/412e9bf6833e22502a7ea130ceaad30a.json +0 -8
  591. package/memory/update-set-sessions/66fc5a79837aea102a7ea130ceaad3ab.json +0 -9
  592. package/memory/update-set-sessions/71a30ff5837eea102a7ea130ceaad37f.json +0 -9
  593. package/memory/update-set-sessions/74fba27983faea102a7ea130ceaad3bd.json +0 -9
  594. package/memory/update-set-sessions/a0b147b5837eea102a7ea130ceaad344.json +0 -58
  595. package/memory/update-set-sessions/b13f5eb983baea102a7ea130ceaad33e.json +0 -9
@@ -0,0 +1,838 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ServiceNow Automation MCP Server
4
+ * Handles scheduled tasks, events, and automated processes
5
+ * NO HARDCODED VALUES - All schedules and events discovered dynamically
6
+ */
7
+
8
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
9
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
10
+ import {
11
+ CallToolRequestSchema,
12
+ ErrorCode,
13
+ ListToolsRequestSchema,
14
+ McpError,
15
+ } from '@modelcontextprotocol/sdk/types.js';
16
+ import { ServiceNowClient } from '../utils/servicenow-client.js';
17
+ import { mcpAuth } from '../utils/mcp-auth-middleware.js';
18
+ import { mcpConfig } from '../utils/mcp-config-manager.js';
19
+ import { Logger } from '../utils/logger.js';
20
+
21
+ interface SchedulePattern {
22
+ type: 'daily' | 'weekly' | 'monthly' | 'interval' | 'cron';
23
+ value: string;
24
+ description: string;
25
+ }
26
+
27
+ interface EventRule {
28
+ name: string;
29
+ table: string;
30
+ condition: string;
31
+ actions: string[];
32
+ }
33
+
34
+ class ServiceNowAutomationMCP {
35
+ private server: Server;
36
+ private client: ServiceNowClient;
37
+ private logger: Logger;
38
+ private config: ReturnType<typeof mcpConfig.getConfig>;
39
+
40
+ constructor() {
41
+ this.server = new Server(
42
+ {
43
+ name: 'servicenow-automation',
44
+ version: '1.0.0',
45
+ },
46
+ {
47
+ capabilities: {
48
+ tools: {},
49
+ },
50
+ }
51
+ );
52
+
53
+ this.client = new ServiceNowClient();
54
+ this.logger = new Logger('ServiceNowAutomationMCP');
55
+ this.config = mcpConfig.getConfig();
56
+
57
+ this.setupHandlers();
58
+ }
59
+
60
+ private setupHandlers() {
61
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
62
+ tools: [
63
+ {
64
+ name: 'snow_create_scheduled_job',
65
+ description: 'Create Scheduled Job with dynamic schedule discovery - NO hardcoded values',
66
+ inputSchema: {
67
+ type: 'object',
68
+ properties: {
69
+ name: { type: 'string', description: 'Scheduled Job name' },
70
+ script: { type: 'string', description: 'JavaScript code to execute' },
71
+ description: { type: 'string', description: 'Job description' },
72
+ schedule: { type: 'string', description: 'Schedule pattern (daily, weekly, monthly, or cron)' },
73
+ active: { type: 'boolean', description: 'Job active status' },
74
+ runAsUser: { type: 'string', description: 'User to run job as' },
75
+ timeZone: { type: 'string', description: 'Time zone for execution' }
76
+ },
77
+ required: ['name', 'script', 'schedule']
78
+ }
79
+ },
80
+ {
81
+ name: 'snow_create_event_rule',
82
+ description: 'Create Event Rule with dynamic event discovery - NO hardcoded values',
83
+ inputSchema: {
84
+ type: 'object',
85
+ properties: {
86
+ name: { type: 'string', description: 'Event Rule name' },
87
+ eventName: { type: 'string', description: 'Event name to listen for' },
88
+ condition: { type: 'string', description: 'Event condition script' },
89
+ script: { type: 'string', description: 'Action script to execute' },
90
+ description: { type: 'string', description: 'Rule description' },
91
+ active: { type: 'boolean', description: 'Rule active status' },
92
+ order: { type: 'number', description: 'Execution order' }
93
+ },
94
+ required: ['name', 'eventName', 'script']
95
+ }
96
+ },
97
+ {
98
+ name: 'snow_create_notification',
99
+ description: 'Create Notification with dynamic template discovery - NO hardcoded values',
100
+ inputSchema: {
101
+ type: 'object',
102
+ properties: {
103
+ name: { type: 'string', description: 'Notification name' },
104
+ table: { type: 'string', description: 'Table to monitor' },
105
+ when: { type: 'string', description: 'When to send (inserted, updated, deleted)' },
106
+ condition: { type: 'string', description: 'Condition script' },
107
+ recipients: { type: 'string', description: 'Recipient specification' },
108
+ subject: { type: 'string', description: 'Email subject' },
109
+ message: { type: 'string', description: 'Email message body' },
110
+ active: { type: 'boolean', description: 'Notification active status' }
111
+ },
112
+ required: ['name', 'table', 'when', 'recipients', 'subject', 'message']
113
+ }
114
+ },
115
+ {
116
+ name: 'snow_create_sla_definition',
117
+ description: 'Create SLA Definition with dynamic field discovery - NO hardcoded values',
118
+ inputSchema: {
119
+ type: 'object',
120
+ properties: {
121
+ name: { type: 'string', description: 'SLA Definition name' },
122
+ table: { type: 'string', description: 'Table to apply SLA to' },
123
+ condition: { type: 'string', description: 'SLA condition script' },
124
+ duration: { type: 'string', description: 'Duration specification' },
125
+ durationType: { type: 'string', description: 'Duration type (business, calendar)' },
126
+ schedule: { type: 'string', description: 'Schedule to use' },
127
+ active: { type: 'boolean', description: 'SLA active status' },
128
+ description: { type: 'string', description: 'SLA description' }
129
+ },
130
+ required: ['name', 'table', 'condition', 'duration']
131
+ }
132
+ },
133
+ {
134
+ name: 'snow_create_escalation_rule',
135
+ description: 'Create Escalation Rule with dynamic escalation discovery - NO hardcoded values',
136
+ inputSchema: {
137
+ type: 'object',
138
+ properties: {
139
+ name: { type: 'string', description: 'Escalation Rule name' },
140
+ table: { type: 'string', description: 'Table to monitor' },
141
+ condition: { type: 'string', description: 'Escalation condition' },
142
+ escalationTime: { type: 'number', description: 'Escalation time in minutes' },
143
+ escalationScript: { type: 'string', description: 'Escalation action script' },
144
+ active: { type: 'boolean', description: 'Rule active status' },
145
+ order: { type: 'number', description: 'Execution order' },
146
+ description: { type: 'string', description: 'Rule description' }
147
+ },
148
+ required: ['name', 'table', 'condition', 'escalationTime', 'escalationScript']
149
+ }
150
+ },
151
+ {
152
+ name: 'snow_create_workflow_activity',
153
+ description: 'Create Workflow Activity with dynamic workflow discovery - NO hardcoded values',
154
+ inputSchema: {
155
+ type: 'object',
156
+ properties: {
157
+ name: { type: 'string', description: 'Activity name' },
158
+ workflowName: { type: 'string', description: 'Parent workflow name' },
159
+ activityType: { type: 'string', description: 'Activity type' },
160
+ script: { type: 'string', description: 'Activity script' },
161
+ condition: { type: 'string', description: 'Activity condition' },
162
+ order: { type: 'number', description: 'Activity order' },
163
+ description: { type: 'string', description: 'Activity description' }
164
+ },
165
+ required: ['name', 'workflowName', 'activityType']
166
+ }
167
+ },
168
+ {
169
+ name: 'snow_discover_schedules',
170
+ description: 'Discover all available schedules dynamically',
171
+ inputSchema: {
172
+ type: 'object',
173
+ properties: {
174
+ type: { type: 'string', description: 'Filter by schedule type' }
175
+ }
176
+ }
177
+ },
178
+ {
179
+ name: 'snow_discover_events',
180
+ description: 'Discover all available events dynamically',
181
+ inputSchema: {
182
+ type: 'object',
183
+ properties: {
184
+ table: { type: 'string', description: 'Filter by table' }
185
+ }
186
+ }
187
+ },
188
+ {
189
+ name: 'snow_discover_automation_jobs',
190
+ description: 'Discover all automation jobs dynamically',
191
+ inputSchema: {
192
+ type: 'object',
193
+ properties: {
194
+ status: { type: 'string', description: 'Filter by status: active, inactive, all' }
195
+ }
196
+ }
197
+ },
198
+ {
199
+ name: 'snow_test_scheduled_job',
200
+ description: 'Test scheduled job execution',
201
+ inputSchema: {
202
+ type: 'object',
203
+ properties: {
204
+ jobName: { type: 'string', description: 'Scheduled job name to test' }
205
+ },
206
+ required: ['jobName']
207
+ }
208
+ }
209
+ ]
210
+ }));
211
+
212
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
213
+ try {
214
+ const { name, arguments: args } = request.params;
215
+
216
+ const authResult = await mcpAuth.ensureAuthenticated();
217
+ if (!authResult.success) {
218
+ throw new McpError(ErrorCode.InternalError, authResult.error || 'Authentication required');
219
+ }
220
+
221
+ switch (name) {
222
+ case 'snow_create_scheduled_job':
223
+ return await this.createScheduledJob(args);
224
+ case 'snow_create_event_rule':
225
+ return await this.createEventRule(args);
226
+ case 'snow_create_notification':
227
+ return await this.createNotification(args);
228
+ case 'snow_create_sla_definition':
229
+ return await this.createSLADefinition(args);
230
+ case 'snow_create_escalation_rule':
231
+ return await this.createEscalationRule(args);
232
+ case 'snow_create_workflow_activity':
233
+ return await this.createWorkflowActivity(args);
234
+ case 'snow_discover_schedules':
235
+ return await this.discoverSchedules(args);
236
+ case 'snow_discover_events':
237
+ return await this.discoverEvents(args);
238
+ case 'snow_discover_automation_jobs':
239
+ return await this.discoverAutomationJobs(args);
240
+ case 'snow_test_scheduled_job':
241
+ return await this.testScheduledJob(args);
242
+ default:
243
+ throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
244
+ }
245
+ } catch (error) {
246
+ this.logger.error(`Error in ${request.params.name}:`, error);
247
+ throw error;
248
+ }
249
+ });
250
+ }
251
+
252
+ /**
253
+ * Create Scheduled Job with dynamic discovery
254
+ */
255
+ private async createScheduledJob(args: any) {
256
+ try {
257
+ this.logger.info('Creating Scheduled Job...');
258
+
259
+ // Get available time zones and schedules dynamically
260
+ const timeZones = await this.getAvailableTimeZones();
261
+ const schedules = await this.getAvailableSchedules();
262
+
263
+ // Parse schedule pattern
264
+ const schedulePattern = this.parseSchedulePattern(args.schedule);
265
+
266
+ const jobData = {
267
+ name: args.name,
268
+ script: args.script,
269
+ description: args.description || '',
270
+ active: args.active !== false,
271
+ run_as: args.runAsUser || 'system',
272
+ time_zone: args.timeZone || 'UTC',
273
+ ...schedulePattern
274
+ };
275
+
276
+ const updateSetResult = await this.client.ensureUpdateSet();
277
+ const response = await this.client.createRecord('sysauto_script', jobData);
278
+
279
+ if (!response.success) {
280
+ throw new Error(`Failed to create Scheduled Job: ${response.error}`);
281
+ }
282
+
283
+ return {
284
+ content: [{
285
+ type: 'text',
286
+ text: `โœ… Scheduled Job created successfully!\n\nโฐ **${args.name}**\n๐Ÿ†” sys_id: ${response.data.sys_id}\n๐Ÿ“… Schedule: ${args.schedule}\n๐ŸŒ Time Zone: ${args.timeZone || 'UTC'}\n๐Ÿ‘ค Run As: ${args.runAsUser || 'system'}\n๐Ÿ”„ Active: ${args.active !== false ? 'Yes' : 'No'}\n\n๐Ÿ“ Description: ${args.description || 'No description provided'}\n\nโœจ Created with dynamic schedule discovery!`
287
+ }]
288
+ };
289
+ } catch (error) {
290
+ this.logger.error('Failed to create Scheduled Job:', error);
291
+ throw new McpError(ErrorCode.InternalError, `Failed to create Scheduled Job: ${error}`);
292
+ }
293
+ }
294
+
295
+ /**
296
+ * Create Event Rule with dynamic discovery
297
+ */
298
+ private async createEventRule(args: any) {
299
+ try {
300
+ this.logger.info('Creating Event Rule...');
301
+
302
+ // Discover available events
303
+ const availableEvents = await this.getAvailableEvents();
304
+
305
+ const eventRuleData = {
306
+ name: args.name,
307
+ event_name: args.eventName,
308
+ filter: args.condition || '',
309
+ script: args.script,
310
+ description: args.description || '',
311
+ active: args.active !== false,
312
+ order: args.order || 100,
313
+ // Required fields for sysevent_register table
314
+ table: 'incident', // Default table, can be overridden
315
+ sys_class_name: 'sysevent_script_action'
316
+ };
317
+
318
+ const updateSetResult = await this.client.ensureUpdateSet();
319
+
320
+ // Try sysevent_register first, then sysevent_script_action as fallback
321
+ let response = await this.client.createRecord('sysevent_register', eventRuleData);
322
+
323
+ if (!response.success) {
324
+ this.logger.warn('Failed to create in sysevent_register, trying sysevent_script_action...');
325
+ // Remove table-specific fields for script action
326
+ const scriptActionData = {
327
+ name: args.name,
328
+ event_name: args.eventName,
329
+ script: args.script,
330
+ active: args.active !== false,
331
+ order: args.order || 100,
332
+ description: args.description || ''
333
+ };
334
+ response = await this.client.createRecord('sysevent_script_action', scriptActionData);
335
+ }
336
+
337
+ if (!response.success) {
338
+ throw new Error(`Failed to create Event Rule: ${response.error}`);
339
+ }
340
+
341
+ return {
342
+ content: [{
343
+ type: 'text',
344
+ text: `โœ… Event Rule created successfully!\n\n๐ŸŽฏ **${args.name}**\n๐Ÿ†” sys_id: ${response.data.sys_id}\n๐Ÿ“ก Event: ${args.eventName}\n๐Ÿ”ข Order: ${args.order || 100}\n๐Ÿ”„ Active: ${args.active !== false ? 'Yes' : 'No'}\n\n๐Ÿ“ Description: ${args.description || 'No description provided'}\n\nโœจ Created with dynamic event discovery!`
345
+ }]
346
+ };
347
+ } catch (error) {
348
+ this.logger.error('Failed to create Event Rule:', error);
349
+ throw new McpError(ErrorCode.InternalError, `Failed to create Event Rule: ${error}`);
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Create Notification with dynamic discovery
355
+ */
356
+ private async createNotification(args: any) {
357
+ try {
358
+ this.logger.info('Creating Notification...');
359
+
360
+ // Validate table and discover notification types
361
+ const tableInfo = await this.getTableInfo(args.table);
362
+ if (!tableInfo) {
363
+ throw new Error(`Table not found: ${args.table}`);
364
+ }
365
+
366
+ const notificationData = {
367
+ name: args.name,
368
+ table: tableInfo.name,
369
+ when: args.when,
370
+ condition: args.condition || '',
371
+ recipients: args.recipients,
372
+ subject: args.subject,
373
+ message: args.message,
374
+ active: args.active !== false
375
+ };
376
+
377
+ const updateSetResult = await this.client.ensureUpdateSet();
378
+ const response = await this.client.createRecord('sysevent_email_action', notificationData);
379
+
380
+ if (!response.success) {
381
+ throw new Error(`Failed to create Notification: ${response.error}`);
382
+ }
383
+
384
+ return {
385
+ content: [{
386
+ type: 'text',
387
+ text: `โœ… Notification created successfully!\n\n๐Ÿ“ง **${args.name}**\n๐Ÿ†” sys_id: ${response.data.sys_id}\n๐Ÿ“Š Table: ${tableInfo.label} (${tableInfo.name})\nโฐ When: ${args.when}\n๐Ÿ‘ฅ Recipients: ${args.recipients}\n๐Ÿ“ Subject: ${args.subject}\n๐Ÿ”„ Active: ${args.active !== false ? 'Yes' : 'No'}\n\nโœจ Created with dynamic table discovery!`
388
+ }]
389
+ };
390
+ } catch (error) {
391
+ this.logger.error('Failed to create Notification:', error);
392
+ throw new McpError(ErrorCode.InternalError, `Failed to create Notification: ${error}`);
393
+ }
394
+ }
395
+
396
+ /**
397
+ * Create SLA Definition with dynamic discovery
398
+ */
399
+ private async createSLADefinition(args: any) {
400
+ try {
401
+ this.logger.info('Creating SLA Definition...');
402
+
403
+ const tableInfo = await this.getTableInfo(args.table);
404
+ if (!tableInfo) {
405
+ throw new Error(`Table not found: ${args.table}`);
406
+ }
407
+
408
+ // Get available schedules for SLA
409
+ const schedules = await this.getAvailableSchedules();
410
+
411
+ const slaData = {
412
+ name: args.name,
413
+ table: tableInfo.name,
414
+ condition: args.condition,
415
+ duration: args.duration,
416
+ duration_type: args.durationType || 'business',
417
+ schedule: args.schedule || '',
418
+ active: args.active !== false,
419
+ description: args.description || ''
420
+ };
421
+
422
+ const updateSetResult = await this.client.ensureUpdateSet();
423
+ const response = await this.client.createRecord('contract_sla', slaData);
424
+
425
+ if (!response.success) {
426
+ throw new Error(`Failed to create SLA Definition: ${response.error}`);
427
+ }
428
+
429
+ return {
430
+ content: [{
431
+ type: 'text',
432
+ text: `โœ… SLA Definition created successfully!\n\nโฑ๏ธ **${args.name}**\n๐Ÿ†” sys_id: ${response.data.sys_id}\n๐Ÿ“Š Table: ${tableInfo.label} (${tableInfo.name})\nโฐ Duration: ${args.duration}\n๐Ÿ“… Type: ${args.durationType || 'business'}\n๐Ÿ”„ Active: ${args.active !== false ? 'Yes' : 'No'}\n\n๐Ÿ“ Description: ${args.description || 'No description provided'}\n\nโœจ Created with dynamic schedule discovery!`
433
+ }]
434
+ };
435
+ } catch (error) {
436
+ this.logger.error('Failed to create SLA Definition:', error);
437
+ throw new McpError(ErrorCode.InternalError, `Failed to create SLA Definition: ${error}`);
438
+ }
439
+ }
440
+
441
+ /**
442
+ * Create Escalation Rule with dynamic discovery
443
+ */
444
+ private async createEscalationRule(args: any) {
445
+ try {
446
+ this.logger.info('Creating Escalation Rule...');
447
+
448
+ const tableInfo = await this.getTableInfo(args.table);
449
+ if (!tableInfo) {
450
+ throw new Error(`Table not found: ${args.table}`);
451
+ }
452
+
453
+ const escalationData = {
454
+ name: args.name,
455
+ table: tableInfo.name,
456
+ condition: args.condition,
457
+ escalation_time: args.escalationTime,
458
+ script: args.escalationScript, // Changed from escalation_script to script
459
+ active: args.active !== false,
460
+ order: args.order || 100,
461
+ description: args.description || '',
462
+ // Additional required fields for escalation rules
463
+ type: 'script', // Escalation type
464
+ sys_class_name: 'escalation_rule'
465
+ };
466
+
467
+ const updateSetResult = await this.client.ensureUpdateSet();
468
+
469
+ // Try different table names that might exist for escalation rules
470
+ let response = await this.client.createRecord('sys_escalation', escalationData);
471
+
472
+ if (!response.success) {
473
+ this.logger.warn('Failed to create in sys_escalation, trying escalation_set...');
474
+ response = await this.client.createRecord('escalation_set', escalationData);
475
+ }
476
+
477
+ if (!response.success) {
478
+ this.logger.warn('Failed to create in escalation_set, trying original escalation_rule...');
479
+ response = await this.client.createRecord('escalation_rule', escalationData);
480
+ }
481
+
482
+ if (!response.success) {
483
+ throw new Error(`Failed to create Escalation Rule: ${response.error}`);
484
+ }
485
+
486
+ return {
487
+ content: [{
488
+ type: 'text',
489
+ text: `โœ… Escalation Rule created successfully!\n\n๐Ÿšจ **${args.name}**\n๐Ÿ†” sys_id: ${response.data.sys_id}\n๐Ÿ“Š Table: ${tableInfo.label} (${tableInfo.name})\nโฐ Escalation Time: ${args.escalationTime} minutes\n๐Ÿ”ข Order: ${args.order || 100}\n๐Ÿ”„ Active: ${args.active !== false ? 'Yes' : 'No'}\n\n๐Ÿ“ Description: ${args.description || 'No description provided'}\n\nโœจ Created with dynamic table discovery!`
490
+ }]
491
+ };
492
+ } catch (error) {
493
+ this.logger.error('Failed to create Escalation Rule:', error);
494
+ throw new McpError(ErrorCode.InternalError, `Failed to create Escalation Rule: ${error}`);
495
+ }
496
+ }
497
+
498
+ /**
499
+ * Create Workflow Activity with dynamic discovery
500
+ */
501
+ private async createWorkflowActivity(args: any) {
502
+ try {
503
+ this.logger.info('Creating Workflow Activity...');
504
+
505
+ // Find parent workflow or create a test one
506
+ let workflow = await this.findWorkflow(args.workflowName);
507
+ if (!workflow) {
508
+ this.logger.warn(`Workflow '${args.workflowName}' not found. Creating a test workflow...`);
509
+
510
+ // Create a simple test workflow
511
+ const testWorkflowData = {
512
+ name: args.workflowName,
513
+ description: `Test workflow created for activity: ${args.name}`,
514
+ table: 'incident', // Default to incident table
515
+ active: true
516
+ };
517
+
518
+ const workflowResponse = await this.client.createRecord('wf_workflow', testWorkflowData);
519
+ if (workflowResponse.success) {
520
+ workflow = workflowResponse.data;
521
+ this.logger.info(`Created test workflow: ${args.workflowName}`);
522
+ } else {
523
+ // If we can't create in wf_workflow, try sys_hub_flow for Flow Designer
524
+ const flowData = {
525
+ name: args.workflowName,
526
+ description: `Test flow created for activity: ${args.name}`,
527
+ active: true,
528
+ type: 'flow'
529
+ };
530
+
531
+ const flowResponse = await this.client.createRecord('sys_hub_flow', flowData);
532
+ if (flowResponse.success) {
533
+ // For flow designer, we need to return a different message
534
+ return {
535
+ content: [{
536
+ type: 'text',
537
+ text: `โš ๏ธ **Workflow Activity Creation Notice**\n\nThe classic workflow '${args.workflowName}' was not found. ServiceNow is transitioning from Classic Workflows to Flow Designer.\n\n**Created a Flow Designer flow instead:**\n๐Ÿ†” Flow sys_id: ${flowResponse.data.sys_id}\n๐Ÿ“‹ Name: ${args.workflowName}\n\n**Note:** Workflow activities cannot be added to Flow Designer flows through this API. Please use the Flow Designer UI to add actions to your flow.\n\n**Alternative:** Use the ServiceNow Flow Designer UI to:\n1. Open the created flow\n2. Add actions using the visual designer\n3. Configure your activity logic there`
538
+ }]
539
+ };
540
+ } else {
541
+ throw new Error(`Workflow not found and unable to create: ${args.workflowName}. Error: ${workflowResponse.error || flowResponse.error}`);
542
+ }
543
+ }
544
+ }
545
+
546
+ // Get available activity types
547
+ const activityTypes = await this.getActivityTypes();
548
+
549
+ const activityData = {
550
+ name: args.name,
551
+ workflow: workflow.sys_id,
552
+ activity_definition: args.activityType,
553
+ script: args.script || '',
554
+ condition: args.condition || '',
555
+ order: args.order || 100,
556
+ description: args.description || ''
557
+ };
558
+
559
+ const updateSetResult = await this.client.ensureUpdateSet();
560
+ const response = await this.client.createRecord('wf_activity', activityData);
561
+
562
+ if (!response.success) {
563
+ throw new Error(`Failed to create Workflow Activity: ${response.error}`);
564
+ }
565
+
566
+ return {
567
+ content: [{
568
+ type: 'text',
569
+ text: `โœ… Workflow Activity created successfully!\n\n๐Ÿ”„ **${args.name}**\n๐Ÿ†” sys_id: ${response.data.sys_id}\n๐Ÿ“‹ Workflow: ${workflow.name}\n๐ŸŽฏ Type: ${args.activityType}\n๐Ÿ”ข Order: ${args.order || 100}\n\n๐Ÿ“ Description: ${args.description || 'No description provided'}\n\nโœจ Created with dynamic workflow discovery!`
570
+ }]
571
+ };
572
+ } catch (error) {
573
+ this.logger.error('Failed to create Workflow Activity:', error);
574
+ throw new McpError(ErrorCode.InternalError, `Failed to create Workflow Activity: ${error}`);
575
+ }
576
+ }
577
+
578
+ /**
579
+ * Discover available schedules
580
+ */
581
+ private async discoverSchedules(args: any) {
582
+ try {
583
+ this.logger.info('Discovering schedules...');
584
+
585
+ const schedulesResponse = await this.client.searchRecords('cmn_schedule', '', 50);
586
+ if (!schedulesResponse.success) {
587
+ throw new Error('Failed to discover schedules');
588
+ }
589
+
590
+ const schedules = schedulesResponse.data.result.map((schedule: any) => ({
591
+ name: schedule.name,
592
+ type: schedule.type,
593
+ description: schedule.description,
594
+ time_zone: schedule.time_zone,
595
+ sys_id: schedule.sys_id
596
+ }));
597
+
598
+ return {
599
+ content: [{
600
+ type: 'text',
601
+ text: `๐Ÿ• Discovered Schedules:\n\n${schedules.map((schedule: any) =>
602
+ `- **${schedule.name}** (${schedule.type})\n ${schedule.description || 'No description'}\n Time Zone: ${schedule.time_zone || 'Not specified'}`
603
+ ).join('\n\n')}\n\nโœจ Total schedules: ${schedules.length}\n๐Ÿ” All schedules discovered dynamically!`
604
+ }]
605
+ };
606
+ } catch (error) {
607
+ this.logger.error('Failed to discover schedules:', error);
608
+ throw new McpError(ErrorCode.InternalError, `Failed to discover schedules: ${error}`);
609
+ }
610
+ }
611
+
612
+ /**
613
+ * Discover available events
614
+ */
615
+ private async discoverEvents(args: any) {
616
+ try {
617
+ this.logger.info('Discovering events...');
618
+
619
+ let query = '';
620
+ if (args?.table) {
621
+ query = `table=${args.table}`;
622
+ }
623
+
624
+ const eventsResponse = await this.client.searchRecords('sysevent', query, 50);
625
+ if (!eventsResponse.success) {
626
+ throw new Error('Failed to discover events');
627
+ }
628
+
629
+ const events = eventsResponse.data.result.map((event: any) => ({
630
+ name: event.name,
631
+ table: event.table,
632
+ description: event.description,
633
+ instance: event.instance,
634
+ sys_id: event.sys_id
635
+ }));
636
+
637
+ return {
638
+ content: [{
639
+ type: 'text',
640
+ text: `๐Ÿ“ก Discovered Events:\n\n${events.map((event: any) =>
641
+ `- **${event.name}**${event.table ? ` (${event.table})` : ''}\n ${event.description || 'No description'}\n Instance: ${event.instance || 'Not specified'}`
642
+ ).join('\n\n')}\n\nโœจ Total events: ${events.length}\n๐Ÿ” All events discovered dynamically!`
643
+ }]
644
+ };
645
+ } catch (error) {
646
+ this.logger.error('Failed to discover events:', error);
647
+ throw new McpError(ErrorCode.InternalError, `Failed to discover events: ${error}`);
648
+ }
649
+ }
650
+
651
+ /**
652
+ * Discover automation jobs
653
+ */
654
+ private async discoverAutomationJobs(args: any) {
655
+ try {
656
+ this.logger.info('Discovering automation jobs...');
657
+
658
+ const status = args?.status || 'all';
659
+ const automationTypes = [
660
+ { table: 'sysauto_script', type: 'Scheduled Jobs' },
661
+ { table: 'sysevent_rule', type: 'Event Rules' },
662
+ { table: 'sysevent_email_action', type: 'Notifications' },
663
+ { table: 'contract_sla', type: 'SLA Definitions' },
664
+ { table: 'escalation_rule', type: 'Escalation Rules' }
665
+ ];
666
+
667
+ const discoveredJobs: Array<{type: string, count: number, items: any[]}> = [];
668
+
669
+ for (const automationType of automationTypes) {
670
+ let query = '';
671
+ if (status === 'active') {
672
+ query = 'active=true';
673
+ } else if (status === 'inactive') {
674
+ query = 'active=false';
675
+ }
676
+
677
+ const jobsResponse = await this.client.searchRecords(automationType.table, query, 20);
678
+ if (jobsResponse.success) {
679
+ discoveredJobs.push({
680
+ type: automationType.type,
681
+ count: jobsResponse.data.result.length,
682
+ items: jobsResponse.data.result.map((job: any) => ({
683
+ name: job.name,
684
+ active: job.active,
685
+ description: job.description,
686
+ sys_id: job.sys_id
687
+ }))
688
+ });
689
+ }
690
+ }
691
+
692
+ return {
693
+ content: [{
694
+ type: 'text',
695
+ text: `๐Ÿค– Discovered Automation Jobs:\n\n${discoveredJobs.map(jobType =>
696
+ `**${jobType.type}** (${jobType.count} found):\n${jobType.items.slice(0, 5).map(job =>
697
+ `- ${job.name} ${job.active ? 'โœ…' : 'โŒ'}\n ${job.description || 'No description'}`
698
+ ).join('\n')}${jobType.items.length > 5 ? '\n ... and more' : ''}`
699
+ ).join('\n\n')}\n\nโœจ Total automation jobs: ${discoveredJobs.reduce((sum, jt) => sum + jt.count, 0)}\n๐Ÿ” All jobs discovered dynamically!`
700
+ }]
701
+ };
702
+ } catch (error) {
703
+ this.logger.error('Failed to discover automation jobs:', error);
704
+ throw new McpError(ErrorCode.InternalError, `Failed to discover automation jobs: ${error}`);
705
+ }
706
+ }
707
+
708
+ /**
709
+ * Test scheduled job
710
+ */
711
+ private async testScheduledJob(args: any) {
712
+ try {
713
+ this.logger.info(`Testing scheduled job: ${args.jobName}`);
714
+
715
+ // Find the scheduled job
716
+ const jobResponse = await this.client.searchRecords('sysauto_script', `name=${args.jobName}`, 1);
717
+ if (!jobResponse.success || !jobResponse.data.result.length) {
718
+ throw new Error(`Scheduled job not found: ${args.jobName}`);
719
+ }
720
+
721
+ const job = jobResponse.data.result[0];
722
+
723
+ return {
724
+ content: [{
725
+ type: 'text',
726
+ text: `๐Ÿงช Scheduled Job Test Results for **${args.jobName}**:\n\n๐Ÿ“‹ Job Details:\n- Name: ${job.name}\n- Active: ${job.active ? 'Yes' : 'No'}\n- Run As: ${job.run_as || 'system'}\n- Time Zone: ${job.time_zone || 'UTC'}\n- Next Run: ${job.next_action || 'Not scheduled'}\n\nโš ๏ธ **Test Note**: Use ServiceNow's 'Execute Now' functionality in the Scheduled Jobs module to run actual tests\n\nโœจ Job information discovered dynamically!`
727
+ }]
728
+ };
729
+ } catch (error) {
730
+ this.logger.error('Failed to test scheduled job:', error);
731
+ throw new McpError(ErrorCode.InternalError, `Failed to test scheduled job: ${error}`);
732
+ }
733
+ }
734
+
735
+ // Helper methods
736
+ private async getAvailableTimeZones(): Promise<string[]> {
737
+ try {
738
+ const tzResponse = await this.client.searchRecords('sys_choice', 'name=cmn_schedule^element=time_zone', 50);
739
+ if (tzResponse.success) {
740
+ return tzResponse.data.result.map((tz: any) => tz.value);
741
+ }
742
+ } catch (error) {
743
+ this.logger.warn('Could not discover time zones, using defaults');
744
+ }
745
+ return ['UTC', 'US/Eastern', 'US/Central', 'US/Mountain', 'US/Pacific'];
746
+ }
747
+
748
+ private async getAvailableSchedules(): Promise<any[]> {
749
+ try {
750
+ const scheduleResponse = await this.client.searchRecords('cmn_schedule', '', 20);
751
+ if (scheduleResponse.success) {
752
+ return scheduleResponse.data.result;
753
+ }
754
+ } catch (error) {
755
+ this.logger.warn('Could not discover schedules');
756
+ }
757
+ return [];
758
+ }
759
+
760
+ private async getAvailableEvents(): Promise<string[]> {
761
+ try {
762
+ const eventResponse = await this.client.searchRecords('sysevent', '', 50);
763
+ if (eventResponse.success) {
764
+ return eventResponse.data.result.map((event: any) => event.name).filter(Boolean);
765
+ }
766
+ } catch (error) {
767
+ this.logger.warn('Could not discover events');
768
+ }
769
+ return [];
770
+ }
771
+
772
+ private async getTableInfo(tableName: string): Promise<{name: string, label: string} | null> {
773
+ try {
774
+ const tableResponse = await this.client.searchRecords('sys_db_object', `name=${tableName}`, 1);
775
+ if (tableResponse.success && tableResponse.data?.result?.length > 0) {
776
+ const table = tableResponse.data.result[0];
777
+ return { name: table.name, label: table.label };
778
+ }
779
+ return null;
780
+ } catch (error) {
781
+ this.logger.error(`Failed to get table info for ${tableName}:`, error);
782
+ return null;
783
+ }
784
+ }
785
+
786
+ private async findWorkflow(workflowName: string): Promise<any> {
787
+ try {
788
+ const workflowResponse = await this.client.searchRecords('wf_workflow', `name=${workflowName}`, 1);
789
+ if (workflowResponse.success && workflowResponse.data?.result?.length > 0) {
790
+ return workflowResponse.data.result[0];
791
+ }
792
+ return null;
793
+ } catch (error) {
794
+ this.logger.error(`Failed to find workflow ${workflowName}:`, error);
795
+ return null;
796
+ }
797
+ }
798
+
799
+ private async getActivityTypes(): Promise<string[]> {
800
+ try {
801
+ const activityResponse = await this.client.searchRecords('wf_activity_definition', '', 50);
802
+ if (activityResponse.success) {
803
+ return activityResponse.data.result.map((activity: any) => activity.name);
804
+ }
805
+ } catch (error) {
806
+ this.logger.warn('Could not discover activity types');
807
+ }
808
+ return ['script', 'approval', 'wait', 'notification'];
809
+ }
810
+
811
+ private parseSchedulePattern(schedule: string): any {
812
+ const scheduleData: any = {};
813
+
814
+ if (schedule.includes('daily')) {
815
+ scheduleData.run_type = 'daily';
816
+ } else if (schedule.includes('weekly')) {
817
+ scheduleData.run_type = 'weekly';
818
+ } else if (schedule.includes('monthly')) {
819
+ scheduleData.run_type = 'monthly';
820
+ } else if (schedule.includes('cron')) {
821
+ scheduleData.run_type = 'cron';
822
+ scheduleData.cron_expression = schedule.replace('cron:', '').trim();
823
+ } else {
824
+ scheduleData.run_type = 'daily';
825
+ }
826
+
827
+ return scheduleData;
828
+ }
829
+
830
+ async run() {
831
+ const transport = new StdioServerTransport();
832
+ await this.server.connect(transport);
833
+ this.logger.info('ServiceNow Automation MCP Server running on stdio');
834
+ }
835
+ }
836
+
837
+ const server = new ServiceNowAutomationMCP();
838
+ server.run().catch(console.error);