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,970 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ServiceNow Platform Development MCP Server
4
+ * Handles core platform development artifacts with full dynamic discovery
5
+ * NO HARDCODED VALUES - All tables, fields, and configurations 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 PlatformArtifactType {
22
+ table: string;
23
+ name: string;
24
+ description: string;
25
+ primaryFields: string[];
26
+ requiredFields: string[];
27
+ deploymentFields: string[];
28
+ }
29
+
30
+ interface DynamicTableInfo {
31
+ name: string;
32
+ label: string;
33
+ fields: Array<{
34
+ name: string;
35
+ type: string;
36
+ label: string;
37
+ mandatory: boolean;
38
+ display: boolean;
39
+ }>;
40
+ }
41
+
42
+ class ServiceNowPlatformDevelopmentMCP {
43
+ private server: Server;
44
+ private client: ServiceNowClient;
45
+ private logger: Logger;
46
+ private config: ReturnType<typeof mcpConfig.getConfig>;
47
+ private tableCache: Map<string, DynamicTableInfo> = new Map();
48
+
49
+ constructor() {
50
+ this.server = new Server(
51
+ {
52
+ name: 'servicenow-platform-development',
53
+ version: '1.0.0',
54
+ },
55
+ {
56
+ capabilities: {
57
+ tools: {},
58
+ },
59
+ }
60
+ );
61
+
62
+ this.client = new ServiceNowClient();
63
+ this.logger = new Logger('ServiceNowPlatformDevelopmentMCP');
64
+ this.config = mcpConfig.getConfig();
65
+
66
+ this.setupHandlers();
67
+ }
68
+
69
+ private setupHandlers() {
70
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
71
+ tools: [
72
+ {
73
+ name: 'snow_create_ui_page',
74
+ description: 'Create UI Pages dynamically with full field discovery - NO hardcoded values',
75
+ inputSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ name: { type: 'string', description: 'UI Page name' },
79
+ title: { type: 'string', description: 'Page title' },
80
+ html: { type: 'string', description: 'HTML content' },
81
+ processingScript: { type: 'string', description: 'Server-side processing script' },
82
+ clientScript: { type: 'string', description: 'Client-side script' },
83
+ css: { type: 'string', description: 'CSS styles' },
84
+ category: { type: 'string', description: 'Page category' }
85
+ },
86
+ required: ['name', 'title', 'html']
87
+ }
88
+ },
89
+ {
90
+ name: 'snow_create_script_include',
91
+ description: 'Create Script Includes with dynamic table discovery - NO hardcoded values',
92
+ inputSchema: {
93
+ type: 'object',
94
+ properties: {
95
+ name: { type: 'string', description: 'Script Include name' },
96
+ script: { type: 'string', description: 'JavaScript code' },
97
+ description: { type: 'string', description: 'Description of functionality' },
98
+ clientCallable: { type: 'boolean', description: 'Can be called from client' },
99
+ apiName: { type: 'string', description: 'API name for external calls' }
100
+ },
101
+ required: ['name', 'script']
102
+ }
103
+ },
104
+ {
105
+ name: 'snow_create_business_rule',
106
+ description: 'Create Business Rules with dynamic table and field discovery - NO hardcoded values',
107
+ inputSchema: {
108
+ type: 'object',
109
+ properties: {
110
+ name: { type: 'string', description: 'Business Rule name' },
111
+ tableName: { type: 'string', description: 'Target table name or sys_id' },
112
+ script: { type: 'string', description: 'JavaScript code' },
113
+ when: { type: 'string', description: 'When to execute: before, after, async, display' },
114
+ condition: { type: 'string', description: 'Condition script' },
115
+ description: { type: 'string', description: 'Rule description' }
116
+ },
117
+ required: ['name', 'tableName', 'script', 'when']
118
+ }
119
+ },
120
+ {
121
+ name: 'snow_create_client_script',
122
+ description: 'Create Client Scripts with dynamic form discovery - NO hardcoded values',
123
+ inputSchema: {
124
+ type: 'object',
125
+ properties: {
126
+ name: { type: 'string', description: 'Client Script name' },
127
+ tableName: { type: 'string', description: 'Target table name or sys_id' },
128
+ script: { type: 'string', description: 'JavaScript code' },
129
+ type: { type: 'string', description: 'Script type: onLoad, onChange, onSubmit, onCellEdit' },
130
+ fieldName: { type: 'string', description: 'Field name for onChange scripts' },
131
+ condition: { type: 'string', description: 'Condition script' },
132
+ description: { type: 'string', description: 'Script description' }
133
+ },
134
+ required: ['name', 'tableName', 'script', 'type']
135
+ }
136
+ },
137
+ {
138
+ name: 'snow_create_ui_policy',
139
+ description: 'Create UI Policies with dynamic field discovery - NO hardcoded values',
140
+ inputSchema: {
141
+ type: 'object',
142
+ properties: {
143
+ name: { type: 'string', description: 'UI Policy name' },
144
+ tableName: { type: 'string', description: 'Target table name or sys_id' },
145
+ condition: { type: 'string', description: 'Condition script' },
146
+ description: { type: 'string', description: 'Policy description' },
147
+ runScripts: { type: 'boolean', description: 'Run scripts when policy applies' },
148
+ reverseWhenFalse: { type: 'boolean', description: 'Reverse actions when condition is false' }
149
+ },
150
+ required: ['name', 'tableName', 'condition']
151
+ }
152
+ },
153
+ {
154
+ name: 'snow_create_ui_action',
155
+ description: 'Create UI Actions with dynamic form discovery - NO hardcoded values',
156
+ inputSchema: {
157
+ type: 'object',
158
+ properties: {
159
+ name: { type: 'string', description: 'UI Action name' },
160
+ tableName: { type: 'string', description: 'Target table name or sys_id' },
161
+ script: { type: 'string', description: 'JavaScript code' },
162
+ condition: { type: 'string', description: 'Condition script' },
163
+ actionName: { type: 'string', description: 'Action name for forms' },
164
+ formButton: { type: 'boolean', description: 'Show as form button' },
165
+ listButton: { type: 'boolean', description: 'Show as list button' },
166
+ description: { type: 'string', description: 'Action description' }
167
+ },
168
+ required: ['name', 'tableName', 'script']
169
+ }
170
+ },
171
+ {
172
+ name: 'snow_discover_platform_tables',
173
+ description: 'Discover all available platform development tables dynamically',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ category: { type: 'string', description: 'Filter by category: ui, script, policy, action, all' }
178
+ }
179
+ }
180
+ },
181
+ {
182
+ name: 'snow_discover_table_fields',
183
+ description: 'Discover all fields for a specific table dynamically',
184
+ inputSchema: {
185
+ type: 'object',
186
+ properties: {
187
+ tableName: { type: 'string', description: 'Table name to discover fields for' }
188
+ },
189
+ required: ['tableName']
190
+ }
191
+ },
192
+ {
193
+ name: 'snow_table_schema_discovery',
194
+ description: 'Comprehensive table schema discovery - structure, relationships, indexes, constraints',
195
+ inputSchema: {
196
+ type: 'object',
197
+ properties: {
198
+ tableName: { type: 'string', description: 'Table name to analyze' },
199
+ includeRelated: { type: 'boolean', description: 'Include related table information' },
200
+ includeIndexes: { type: 'boolean', description: 'Include index information' },
201
+ includeExtensions: { type: 'boolean', description: 'Include table extensions/hierarchy' },
202
+ maxDepth: { type: 'number', description: 'Max depth for relationship discovery (default: 2)' }
203
+ },
204
+ required: ['tableName']
205
+ }
206
+ }
207
+ ]
208
+ }));
209
+
210
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
211
+ try {
212
+ const { name, arguments: args } = request.params;
213
+
214
+ // Ensure authentication
215
+ const authResult = await mcpAuth.ensureAuthenticated();
216
+ if (!authResult.success) {
217
+ throw new McpError(
218
+ ErrorCode.InternalError,
219
+ authResult.error || 'Authentication required'
220
+ );
221
+ }
222
+
223
+ switch (name) {
224
+ case 'snow_create_ui_page':
225
+ return await this.createUIPage(args);
226
+ case 'snow_create_script_include':
227
+ return await this.createScriptInclude(args);
228
+ case 'snow_create_business_rule':
229
+ return await this.createBusinessRule(args);
230
+ case 'snow_create_client_script':
231
+ return await this.createClientScript(args);
232
+ case 'snow_create_ui_policy':
233
+ return await this.createUIPolicy(args);
234
+ case 'snow_create_ui_action':
235
+ return await this.createUIAction(args);
236
+ case 'snow_discover_platform_tables':
237
+ return await this.discoverPlatformTables(args);
238
+ case 'snow_discover_table_fields':
239
+ return await this.discoverTableFields(args);
240
+ case 'snow_table_schema_discovery':
241
+ return await this.discoverTableSchema(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
+ * Dynamically discover all platform development tables
254
+ */
255
+ private async discoverPlatformTables(args: any) {
256
+ try {
257
+ this.logger.info('Discovering platform development tables...');
258
+
259
+ // Define table categories based on actual ServiceNow schema
260
+ const tableQueries = [
261
+ { category: 'ui', query: 'nameSTARTSWITHsys_ui^ORnameSTARTSWITHsp_' },
262
+ { category: 'script', query: 'nameSTARTSWITHsys_script^ORnameSTARTSWITHsys_processor' },
263
+ { category: 'policy', query: 'nameSTARTSWITHsys_ui_policy^ORnameSTARTSWITHsys_ui_action' },
264
+ { category: 'security', query: 'nameSTARTSWITHsys_security^ORnameSTARTSWITHsys_user' },
265
+ { category: 'system', query: 'nameSTARTSWITHsys_dictionary^ORnameSTARTSWITHsys_choice' }
266
+ ];
267
+
268
+ const category = args?.category || 'all';
269
+ const discoveredTables: Array<{category: string, tables: any[]}> = [];
270
+
271
+ for (const tableQuery of tableQueries) {
272
+ if (category === 'all' || category === tableQuery.category) {
273
+ const tablesResponse = await this.client.searchRecords(
274
+ 'sys_db_object',
275
+ tableQuery.query,
276
+ 50
277
+ );
278
+
279
+ if (tablesResponse.success && tablesResponse.data) {
280
+ discoveredTables.push({
281
+ category: tableQuery.category,
282
+ tables: tablesResponse.data.result.map((table: any) => ({
283
+ name: table.name,
284
+ label: table.label,
285
+ super_class: table.super_class,
286
+ is_extendable: table.is_extendable,
287
+ sys_id: table.sys_id
288
+ }))
289
+ });
290
+ }
291
+ }
292
+ }
293
+
294
+ return {
295
+ content: [{
296
+ type: 'text',
297
+ text: `šŸ” Discovered Platform Development Tables:\n\n${discoveredTables.map(cat =>
298
+ `**${cat.category.toUpperCase()} Tables:**\n${cat.tables.map(table =>
299
+ `- ${table.name} (${table.label})`
300
+ ).join('\n')}`
301
+ ).join('\n\n')}\n\n✨ All tables discovered dynamically from ServiceNow schema - no hardcoded values!`
302
+ }]
303
+ };
304
+ } catch (error) {
305
+ this.logger.error('Failed to discover platform tables:', error);
306
+ throw new McpError(ErrorCode.InternalError, `Failed to discover tables: ${error}`);
307
+ }
308
+ }
309
+
310
+ /**
311
+ * Dynamically discover table fields
312
+ */
313
+ private async discoverTableFields(args: any) {
314
+ try {
315
+ const tableName = args.tableName;
316
+ this.logger.info(`Discovering fields for table: ${tableName}`);
317
+
318
+ // First, resolve table name to sys_id if needed
319
+ const tableInfo = await this.getTableInfo(tableName);
320
+ if (!tableInfo) {
321
+ throw new Error(`Table not found: ${tableName}`);
322
+ }
323
+
324
+ // Get all fields for this table
325
+ const fieldsResponse = await this.client.searchRecords(
326
+ 'sys_dictionary',
327
+ `nameSTARTSWITH${tableInfo.name}^element!=NULL`,
328
+ 100
329
+ );
330
+
331
+ if (!fieldsResponse.success || !fieldsResponse.data) {
332
+ throw new Error(`Failed to get fields for table: ${tableName}`);
333
+ }
334
+
335
+ const fields = fieldsResponse.data.result.map((field: any) => ({
336
+ name: field.element,
337
+ type: field.internal_type,
338
+ label: field.column_label,
339
+ mandatory: field.mandatory === 'true',
340
+ display: field.display === 'true',
341
+ max_length: field.max_length,
342
+ reference: field.reference,
343
+ choice: field.choice
344
+ }));
345
+
346
+ // Cache the table info
347
+ this.tableCache.set(tableName, {
348
+ name: tableInfo.name,
349
+ label: tableInfo.label,
350
+ fields: fields
351
+ });
352
+
353
+ return {
354
+ content: [{
355
+ type: 'text',
356
+ text: `šŸ“‹ Fields for ${tableInfo.label} (${tableInfo.name}):\n\n${fields.map((field: any) =>
357
+ `- **${field.name}** (${field.label})\n Type: ${field.type}${field.mandatory ? ' *Required*' : ''}${field.reference ? ` -> ${field.reference}` : ''}`
358
+ ).join('\n')}\n\nšŸ” Total fields: ${fields.length}\n✨ All fields discovered dynamically from ServiceNow schema!`
359
+ }]
360
+ };
361
+ } catch (error) {
362
+ this.logger.error('Failed to discover table fields:', error);
363
+ throw new McpError(ErrorCode.InternalError, `Failed to discover fields: ${error}`);
364
+ }
365
+ }
366
+
367
+ /**
368
+ * Get table information dynamically
369
+ */
370
+ private async getTableInfo(tableName: string): Promise<{name: string, label: string, sys_id: string} | null> {
371
+ try {
372
+ this.logger.debug(`Looking up table info for: ${tableName}`);
373
+
374
+ // First, check if this is a known standard table that may not appear in sys_db_object
375
+ const standardTables: Record<string, {label: string}> = {
376
+ 'incident': { label: 'Incident' },
377
+ 'problem': { label: 'Problem' },
378
+ 'change_request': { label: 'Change Request' },
379
+ 'sc_request': { label: 'Request' },
380
+ 'sc_req_item': { label: 'Requested Item' },
381
+ 'sc_task': { label: 'Catalog Task' },
382
+ 'task': { label: 'Task' }
383
+ };
384
+
385
+ if (standardTables[tableName]) {
386
+ this.logger.debug(`Using known standard table: ${tableName}`);
387
+ return {
388
+ name: tableName,
389
+ label: standardTables[tableName].label,
390
+ sys_id: `standard_table_${tableName}` // Placeholder sys_id for standard tables
391
+ };
392
+ }
393
+
394
+ // Try direct lookup first
395
+ const tableResponse = await this.client.searchRecords(
396
+ 'sys_db_object',
397
+ `name=${tableName}`,
398
+ 1
399
+ );
400
+
401
+ if (tableResponse.success && tableResponse.data?.result?.length > 0) {
402
+ const table = tableResponse.data.result[0];
403
+ return {
404
+ name: table.name,
405
+ label: table.label,
406
+ sys_id: table.sys_id
407
+ };
408
+ }
409
+
410
+ // Log the actual response for debugging
411
+ this.logger.debug(`Table lookup response for ${tableName}: ${JSON.stringify(tableResponse)}`);
412
+
413
+ // Try by sys_id
414
+ const tableByIdResponse = await this.client.searchRecords(
415
+ 'sys_db_object',
416
+ `sys_id=${tableName}`,
417
+ 1
418
+ );
419
+
420
+ if (tableByIdResponse.success && tableByIdResponse.data?.result?.length > 0) {
421
+ const table = tableByIdResponse.data.result[0];
422
+ return {
423
+ name: table.name,
424
+ label: table.label,
425
+ sys_id: table.sys_id
426
+ };
427
+ }
428
+
429
+ // Try partial match
430
+ const tableByPartialResponse = await this.client.searchRecords(
431
+ 'sys_db_object',
432
+ `nameCONTAINS${tableName}^ORlabelCONTAINS${tableName}`,
433
+ 5
434
+ );
435
+
436
+ if (tableByPartialResponse.success && tableByPartialResponse.data?.result?.length > 0) {
437
+ const table = tableByPartialResponse.data.result[0];
438
+ return {
439
+ name: table.name,
440
+ label: table.label,
441
+ sys_id: table.sys_id
442
+ };
443
+ }
444
+
445
+ return null;
446
+ } catch (error) {
447
+ this.logger.error(`Failed to get table info for ${tableName}:`, error);
448
+ return null;
449
+ }
450
+ }
451
+
452
+ /**
453
+ * Create UI Page with dynamic field discovery
454
+ */
455
+ private async createUIPage(args: any) {
456
+ try {
457
+ this.logger.info('Creating UI Page...');
458
+
459
+ // Get UI Page table structure dynamically
460
+ const uiPageFields = await this.discoverRequiredFields('sys_ui_page');
461
+
462
+ const uiPageData = {
463
+ name: args.name,
464
+ title: args.title,
465
+ html: args.html,
466
+ processing_script: args.processingScript || '',
467
+ client_script: args.clientScript || '',
468
+ css: args.css || '',
469
+ category: args.category || 'general'
470
+ };
471
+
472
+ // Ensure we have Update Set
473
+ const updateSetResult = await this.client.ensureUpdateSet();
474
+
475
+ const response = await this.client.createRecord('sys_ui_page', uiPageData);
476
+
477
+ if (!response.success) {
478
+ throw new Error(`Failed to create UI Page: ${response.error}`);
479
+ }
480
+
481
+ return {
482
+ content: [{
483
+ type: 'text',
484
+ text: `āœ… UI Page created successfully!\n\nšŸ“„ **${args.title}** (${args.name})\nšŸ†” sys_id: ${response.data.sys_id}\n\nšŸ”— View in ServiceNow: Open UI Page editor\n\n✨ Created with dynamic field discovery - no hardcoded values!`
485
+ }]
486
+ };
487
+ } catch (error) {
488
+ this.logger.error('Failed to create UI Page:', error);
489
+ throw new McpError(ErrorCode.InternalError, `Failed to create UI Page: ${error}`);
490
+ }
491
+ }
492
+
493
+ /**
494
+ * Create Script Include with dynamic discovery
495
+ */
496
+ private async createScriptInclude(args: any) {
497
+ try {
498
+ this.logger.info('Creating Script Include...');
499
+
500
+ const scriptIncludeData = {
501
+ name: args.name,
502
+ script: args.script,
503
+ description: args.description || '',
504
+ client_callable: args.clientCallable || false,
505
+ api_name: args.apiName || args.name
506
+ };
507
+
508
+ const updateSetResult = await this.client.ensureUpdateSet();
509
+ const response = await this.client.createRecord('sys_script_include', scriptIncludeData);
510
+
511
+ if (!response.success) {
512
+ throw new Error(`Failed to create Script Include: ${response.error}`);
513
+ }
514
+
515
+ return {
516
+ content: [{
517
+ type: 'text',
518
+ text: `āœ… Script Include created successfully!\n\nšŸ“œ **${args.name}**\nšŸ†” sys_id: ${response.data.sys_id}\nšŸ”§ Client Callable: ${args.clientCallable ? 'Yes' : 'No'}\n\nšŸ“ Description: ${args.description || 'No description provided'}\n\n✨ Created with dynamic field discovery!`
519
+ }]
520
+ };
521
+ } catch (error) {
522
+ this.logger.error('Failed to create Script Include:', error);
523
+ throw new McpError(ErrorCode.InternalError, `Failed to create Script Include: ${error}`);
524
+ }
525
+ }
526
+
527
+ /**
528
+ * Create Business Rule with dynamic table discovery
529
+ */
530
+ private async createBusinessRule(args: any) {
531
+ try {
532
+ this.logger.info('Creating Business Rule...');
533
+
534
+ // Resolve table name dynamically
535
+ const tableInfo = await this.getTableInfo(args.tableName);
536
+ if (!tableInfo) {
537
+ throw new Error(`Table not found: ${args.tableName}`);
538
+ }
539
+
540
+ const businessRuleData = {
541
+ name: args.name,
542
+ table: tableInfo.name,
543
+ script: args.script,
544
+ when: args.when,
545
+ condition: args.condition || '',
546
+ description: args.description || ''
547
+ };
548
+
549
+ const updateSetResult = await this.client.ensureUpdateSet();
550
+ const response = await this.client.createRecord('sys_script', businessRuleData);
551
+
552
+ if (!response.success) {
553
+ throw new Error(`Failed to create Business Rule: ${response.error}`);
554
+ }
555
+
556
+ return {
557
+ content: [{
558
+ type: 'text',
559
+ text: `āœ… Business Rule created successfully!\n\nšŸ“‹ **${args.name}**\nšŸ†” sys_id: ${response.data.sys_id}\nšŸ“Š Table: ${tableInfo.label} (${tableInfo.name})\nā° When: ${args.when}\n\nšŸ“ Description: ${args.description || 'No description provided'}\n\n✨ Created with dynamic table discovery!`
560
+ }]
561
+ };
562
+ } catch (error) {
563
+ this.logger.error('Failed to create Business Rule:', error);
564
+ throw new McpError(ErrorCode.InternalError, `Failed to create Business Rule: ${error}`);
565
+ }
566
+ }
567
+
568
+ /**
569
+ * Create Client Script with dynamic discovery
570
+ */
571
+ private async createClientScript(args: any) {
572
+ try {
573
+ this.logger.info('Creating Client Script...');
574
+
575
+ const tableInfo = await this.getTableInfo(args.tableName);
576
+ if (!tableInfo) {
577
+ throw new Error(`Table not found: ${args.tableName}`);
578
+ }
579
+
580
+ const clientScriptData = {
581
+ name: args.name,
582
+ table: tableInfo.name,
583
+ script: args.script,
584
+ type: args.type,
585
+ field: args.fieldName || '',
586
+ condition: args.condition || '',
587
+ description: args.description || ''
588
+ };
589
+
590
+ const updateSetResult = await this.client.ensureUpdateSet();
591
+ const response = await this.client.createRecord('sys_script_client', clientScriptData);
592
+
593
+ if (!response.success) {
594
+ throw new Error(`Failed to create Client Script: ${response.error}`);
595
+ }
596
+
597
+ return {
598
+ content: [{
599
+ type: 'text',
600
+ text: `āœ… Client Script created successfully!\n\nšŸ“œ **${args.name}**\nšŸ†” sys_id: ${response.data.sys_id}\nšŸ“Š Table: ${tableInfo.label} (${tableInfo.name})\nšŸ”§ Type: ${args.type}\n${args.fieldName ? `šŸ·ļø Field: ${args.fieldName}\n` : ''}\nšŸ“ Description: ${args.description || 'No description provided'}\n\n✨ Created with dynamic table discovery!`
601
+ }]
602
+ };
603
+ } catch (error) {
604
+ this.logger.error('Failed to create Client Script:', error);
605
+ throw new McpError(ErrorCode.InternalError, `Failed to create Client Script: ${error}`);
606
+ }
607
+ }
608
+
609
+ /**
610
+ * Create UI Policy with dynamic discovery
611
+ */
612
+ private async createUIPolicy(args: any) {
613
+ try {
614
+ this.logger.info('Creating UI Policy...');
615
+
616
+ const tableInfo = await this.getTableInfo(args.tableName);
617
+ if (!tableInfo) {
618
+ throw new Error(`Table not found: ${args.tableName}`);
619
+ }
620
+
621
+ const uiPolicyData = {
622
+ name: args.name,
623
+ table: tableInfo.name,
624
+ conditions: args.condition,
625
+ description: args.description || '',
626
+ run_scripts: args.runScripts || false,
627
+ reverse_if_false: args.reverseWhenFalse || false
628
+ };
629
+
630
+ const updateSetResult = await this.client.ensureUpdateSet();
631
+ const response = await this.client.createRecord('sys_ui_policy', uiPolicyData);
632
+
633
+ if (!response.success) {
634
+ throw new Error(`Failed to create UI Policy: ${response.error}`);
635
+ }
636
+
637
+ return {
638
+ content: [{
639
+ type: 'text',
640
+ text: `āœ… UI Policy created successfully!\n\nšŸ“‹ **${args.name}**\nšŸ†” sys_id: ${response.data.sys_id}\nšŸ“Š Table: ${tableInfo.label} (${tableInfo.name})\nšŸ”§ Run Scripts: ${args.runScripts ? 'Yes' : 'No'}\n\nšŸ“ Description: ${args.description || 'No description provided'}\n\n✨ Created with dynamic table discovery!`
641
+ }]
642
+ };
643
+ } catch (error) {
644
+ this.logger.error('Failed to create UI Policy:', error);
645
+ throw new McpError(ErrorCode.InternalError, `Failed to create UI Policy: ${error}`);
646
+ }
647
+ }
648
+
649
+ /**
650
+ * Create UI Action with dynamic discovery
651
+ */
652
+ private async createUIAction(args: any) {
653
+ try {
654
+ this.logger.info('Creating UI Action...');
655
+
656
+ const tableInfo = await this.getTableInfo(args.tableName);
657
+ if (!tableInfo) {
658
+ throw new Error(`Table not found: ${args.tableName}`);
659
+ }
660
+
661
+ const uiActionData = {
662
+ name: args.name,
663
+ table: tableInfo.name,
664
+ script: args.script,
665
+ condition: args.condition || '',
666
+ action_name: args.actionName || args.name,
667
+ form_button: args.formButton || false,
668
+ list_button: args.listButton || false,
669
+ description: args.description || ''
670
+ };
671
+
672
+ const updateSetResult = await this.client.ensureUpdateSet();
673
+ const response = await this.client.createRecord('sys_ui_action', uiActionData);
674
+
675
+ if (!response.success) {
676
+ throw new Error(`Failed to create UI Action: ${response.error}`);
677
+ }
678
+
679
+ return {
680
+ content: [{
681
+ type: 'text',
682
+ text: `āœ… UI Action created successfully!\n\nšŸŽÆ **${args.name}**\nšŸ†” sys_id: ${response.data.sys_id}\nšŸ“Š Table: ${tableInfo.label} (${tableInfo.name})\nšŸ”˜ Form Button: ${args.formButton ? 'Yes' : 'No'}\nšŸ“ List Button: ${args.listButton ? 'Yes' : 'No'}\n\nšŸ“ Description: ${args.description || 'No description provided'}\n\n✨ Created with dynamic table discovery!`
683
+ }]
684
+ };
685
+ } catch (error) {
686
+ this.logger.error('Failed to create UI Action:', error);
687
+ throw new McpError(ErrorCode.InternalError, `Failed to create UI Action: ${error}`);
688
+ }
689
+ }
690
+
691
+ /**
692
+ * Discover required fields for a table dynamically
693
+ */
694
+ private async discoverRequiredFields(tableName: string): Promise<string[]> {
695
+ try {
696
+ const fieldsResponse = await this.client.searchRecords(
697
+ 'sys_dictionary',
698
+ `nameSTARTSWITH${tableName}^element!=NULL^mandatory=true`,
699
+ 50
700
+ );
701
+
702
+ if (fieldsResponse.success && fieldsResponse.data) {
703
+ return fieldsResponse.data.result.map((field: any) => field.element);
704
+ }
705
+
706
+ return [];
707
+ } catch (error) {
708
+ this.logger.error(`Failed to discover required fields for ${tableName}:`, error);
709
+ return [];
710
+ }
711
+ }
712
+
713
+ /**
714
+ * Comprehensive table schema discovery
715
+ */
716
+ private async discoverTableSchema(args: any) {
717
+ try {
718
+ const { tableName, includeRelated = true, includeIndexes = true, includeExtensions = true, maxDepth = 2 } = args;
719
+ this.logger.info(`Discovering comprehensive schema for table: ${tableName}`);
720
+
721
+ // Validate authentication
722
+ if (!this.client) {
723
+ throw new Error('ServiceNow client not initialized');
724
+ }
725
+
726
+ // Get table information
727
+ const tableInfo = await this.getTableInfo(tableName);
728
+ if (!tableInfo) {
729
+ throw new Error(`Table not found: ${tableName}. Searched in sys_db_object table.`);
730
+ }
731
+
732
+ this.logger.debug(`Found table info: ${JSON.stringify(tableInfo)}`);
733
+
734
+ // Get detailed table metadata
735
+ this.logger.debug(`Attempting to fetch table details for sys_id: ${tableInfo.sys_id}`);
736
+
737
+ // Check if this is a standard table with placeholder sys_id
738
+ const isStandardTable = tableInfo.sys_id.startsWith('standard_table_');
739
+ let tableDetailsResponse: any = { success: false };
740
+
741
+ if (!isStandardTable) {
742
+ tableDetailsResponse = await this.client.getRecord('sys_db_object', tableInfo.sys_id);
743
+ }
744
+
745
+ // Declare the variable once with proper type
746
+ let tableDetails: any;
747
+
748
+ if (!tableDetailsResponse.success || isStandardTable) {
749
+ const errorMessage = tableDetailsResponse.error ||
750
+ JSON.stringify(tableDetailsResponse) ||
751
+ 'Unknown error occurred while fetching table details';
752
+ this.logger.error(`Table details fetch failed for ${tableInfo.sys_id}:`, tableDetailsResponse);
753
+
754
+ // Fallback: try using basic table info if detailed fetch fails
755
+ this.logger.warn(`Falling back to basic table info for ${tableInfo.name}`);
756
+ tableDetails = {
757
+ name: tableInfo.name,
758
+ label: tableInfo.label,
759
+ sys_id: tableInfo.sys_id,
760
+ is_extendable: 'unknown',
761
+ access: 'unknown',
762
+ sys_created_on: 'unknown',
763
+ sys_updated_on: 'unknown',
764
+ row_count: 'unknown',
765
+ super_class: null,
766
+ extension_model: 'unknown',
767
+ sys_scope: null
768
+ };
769
+ } else {
770
+ tableDetails = tableDetailsResponse.data;
771
+ }
772
+
773
+ // Get all fields with detailed information
774
+ const fieldsResponse = await this.client.searchRecords(
775
+ 'sys_dictionary',
776
+ `name=${tableInfo.name}^element!=NULL`,
777
+ 200
778
+ );
779
+
780
+ if (!fieldsResponse.success || !fieldsResponse.data) {
781
+ const errorMessage = fieldsResponse.error ||
782
+ 'No data returned from fields query' ||
783
+ JSON.stringify(fieldsResponse);
784
+ this.logger.error(`Fields fetch failed for ${tableInfo.name}:`, fieldsResponse);
785
+ throw new Error(`Failed to get fields for table ${tableName}: ${errorMessage}`);
786
+ }
787
+
788
+ const fields = fieldsResponse.data.result.map((field: any) => ({
789
+ name: field.element,
790
+ label: field.column_label,
791
+ type: field.internal_type,
792
+ dataType: field.internal_type,
793
+ maxLength: field.max_length,
794
+ mandatory: field.mandatory === 'true',
795
+ readOnly: field.read_only === 'true',
796
+ display: field.display === 'true',
797
+ active: field.active === 'true',
798
+ array: field.array === 'true',
799
+ reference: field.reference,
800
+ referenceQual: field.reference_qual,
801
+ defaultValue: field.default_value,
802
+ choice: field.choice,
803
+ calculated: field.virtual === 'true',
804
+ attributes: field.attributes,
805
+ comments: field.comments
806
+ }));
807
+
808
+ // Analyze relationships
809
+ const relationships = fields
810
+ .filter((field: any) => field.reference)
811
+ .map((field: any) => ({
812
+ field: field.name,
813
+ targetTable: field.reference,
814
+ label: field.label,
815
+ referenceQual: field.referenceQual
816
+ }));
817
+
818
+ // Get table hierarchy if requested
819
+ let hierarchy: any = null;
820
+ if (includeExtensions) {
821
+ hierarchy = {
822
+ extends: tableDetails.super_class?.display_value || null,
823
+ extendsTable: tableDetails.super_class?.value || null,
824
+ isExtendable: tableDetails.is_extendable === 'true',
825
+ extensionModel: tableDetails.extension_model
826
+ };
827
+
828
+ // Find tables that extend this one
829
+ const childTablesResponse = await this.client.searchRecords(
830
+ 'sys_db_object',
831
+ `super_class=${tableInfo.sys_id}`,
832
+ 50
833
+ );
834
+
835
+ if (childTablesResponse.success && childTablesResponse.data) {
836
+ hierarchy.extendedBy = childTablesResponse.data.result.map((child: any) => ({
837
+ name: child.name,
838
+ label: child.label,
839
+ sys_id: child.sys_id
840
+ }));
841
+ }
842
+ }
843
+
844
+ // Get indexes if requested
845
+ let indexes: any[] = [];
846
+ if (includeIndexes) {
847
+ const indexResponse = await this.client.searchRecords(
848
+ 'sys_db_index',
849
+ `table=${tableInfo.sys_id}`,
850
+ 50
851
+ );
852
+
853
+ if (indexResponse.success && indexResponse.data) {
854
+ indexes = indexResponse.data.result.map((index: any) => ({
855
+ name: index.name,
856
+ unique: index.unique === 'true',
857
+ clustered: index.clustered === 'true',
858
+ fields: index.fields
859
+ }));
860
+ }
861
+ }
862
+
863
+ // Get related tables if requested
864
+ const relatedTables: any[] = [];
865
+ if (includeRelated && relationships.length > 0) {
866
+ const uniqueRelatedTables = [...new Set(relationships.map((rel: any) => rel.targetTable))];
867
+
868
+ for (const relTable of uniqueRelatedTables.slice(0, 10)) { // Limit to prevent too many queries
869
+ const relTableInfo = await this.getTableInfo(String(relTable));
870
+ if (relTableInfo) {
871
+ relatedTables.push({
872
+ name: relTableInfo.name,
873
+ label: relTableInfo.label,
874
+ referencedBy: relationships
875
+ .filter((rel: any) => rel.targetTable === relTable)
876
+ .map((rel: any) => rel.field)
877
+ });
878
+ }
879
+ }
880
+ }
881
+
882
+ // Compile comprehensive schema information
883
+ const schema = {
884
+ table: {
885
+ name: tableInfo.name,
886
+ label: tableInfo.label,
887
+ sys_id: tableInfo.sys_id,
888
+ isExtendable: tableDetails.is_extendable === 'true',
889
+ isSystemTable: tableDetails.sys_scope?.display_value === 'global',
890
+ created: tableDetails.sys_created_on,
891
+ updated: tableDetails.sys_updated_on,
892
+ recordCount: tableDetails.row_count || 'Unknown',
893
+ accessControls: tableDetails.access || 'Not specified'
894
+ },
895
+ hierarchy,
896
+ fields: {
897
+ total: fields.length,
898
+ mandatory: fields.filter((f: any) => f.mandatory).length,
899
+ references: fields.filter((f: any) => f.reference).length,
900
+ calculated: fields.filter((f: any) => f.calculated).length,
901
+ list: fields
902
+ },
903
+ relationships: {
904
+ total: relationships.length,
905
+ list: relationships,
906
+ relatedTables
907
+ },
908
+ indexes: {
909
+ total: indexes.length,
910
+ list: indexes
911
+ }
912
+ };
913
+
914
+ return {
915
+ content: [{
916
+ type: 'text',
917
+ text: `šŸ” **Comprehensive Schema Discovery for ${tableInfo.label} (${tableInfo.name})**\n\n` +
918
+ `šŸ“Š **Table Overview:**\n` +
919
+ `- Label: ${schema.table.label}\n` +
920
+ `- Name: ${schema.table.name}\n` +
921
+ `- System ID: ${schema.table.sys_id}\n` +
922
+ `- Extendable: ${schema.table.isExtendable ? 'Yes' : 'No'}\n` +
923
+ `- System Table: ${schema.table.isSystemTable ? 'Yes' : 'No'}\n` +
924
+ `- Record Count: ${schema.table.recordCount}\n\n` +
925
+
926
+ (hierarchy ? `šŸ”— **Table Hierarchy:**\n` +
927
+ `- Extends: ${hierarchy.extends || 'None'}\n` +
928
+ `- Extended By: ${hierarchy.extendedBy?.length || 0} tables\n` +
929
+ (hierarchy.extendedBy?.length > 0 ?
930
+ hierarchy.extendedBy.map((t: any) => ` - ${t.label} (${t.name})`).join('\n') + '\n' : '') +
931
+ '\n' : '') +
932
+
933
+ `šŸ“‹ **Fields Summary:**\n` +
934
+ `- Total Fields: ${schema.fields.total}\n` +
935
+ `- Mandatory Fields: ${schema.fields.mandatory}\n` +
936
+ `- Reference Fields: ${schema.fields.references}\n` +
937
+ `- Calculated Fields: ${schema.fields.calculated}\n\n` +
938
+
939
+ `šŸ”— **Relationships:**\n` +
940
+ `- Total References: ${schema.relationships.total}\n` +
941
+ (schema.relationships.list.length > 0 ?
942
+ schema.relationships.list.map((rel: any) =>
943
+ ` - ${rel.field} → ${rel.targetTable} (${rel.label})`
944
+ ).join('\n') + '\n' : '') +
945
+ '\n' +
946
+
947
+ (indexes.length > 0 ? `šŸ”‘ **Indexes:**\n` +
948
+ indexes.map((idx: any) =>
949
+ `- ${idx.name} (${idx.unique ? 'Unique' : 'Non-unique'}) on: ${idx.fields}`
950
+ ).join('\n') + '\n\n' : '') +
951
+
952
+ `\nšŸ“ **Full Schema Details:**\n\`\`\`json\n${JSON.stringify(schema, null, 2)}\n\`\`\`\n\n` +
953
+ `✨ All schema information discovered dynamically from ServiceNow!`
954
+ }]
955
+ };
956
+ } catch (error) {
957
+ this.logger.error('Failed to discover table schema:', error);
958
+ throw new McpError(ErrorCode.InternalError, `Failed to discover table schema: ${error}`);
959
+ }
960
+ }
961
+
962
+ async run() {
963
+ const transport = new StdioServerTransport();
964
+ await this.server.connect(transport);
965
+ this.logger.info('ServiceNow Platform Development MCP Server running on stdio');
966
+ }
967
+ }
968
+
969
+ const server = new ServiceNowPlatformDevelopmentMCP();
970
+ server.run().catch(console.error);