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.
- package/.claude/helpers/github-setup.sh +28 -0
- package/.claude/helpers/quick-start.sh +19 -0
- package/.claude/helpers/setup-mcp.sh +18 -0
- package/.claude/settings.local.json +33 -0
- package/.claude-flow/metrics/system-metrics.json +1992 -0
- package/.env.example +21 -0
- package/.roo/README.md +402 -0
- package/.roo/mcp-list.txt +257 -0
- package/.roo/mcp.json +32 -0
- package/.roo/workflows/basic-tdd.json +32 -0
- package/.roomodes +201 -0
- package/README.md +114 -628
- package/activate-mcp.sh +15 -0
- package/dist/cli.js.bak +2052 -0
- package/manual-register-mcp.js +134 -0
- package/mcp-wrapper.sh +12 -0
- package/package.json +2 -2
- package/scripts/create-env.js +6 -1
- package/scripts/reset-mcp-servers.js +246 -0
- package/scripts/update-version.js +31 -0
- package/src/agents/README.md +192 -0
- package/src/agents/base-agent.ts +251 -0
- package/src/agents/coordinator.ts +971 -0
- package/src/agents/index.ts +18 -0
- package/src/agents/queen-403-handler.ts +230 -0
- package/src/agents/queen-agent.ts +1399 -0
- package/src/agents/script-writer-agent.ts +769 -0
- package/src/agents/security-agent.ts +726 -0
- package/src/agents/widget-creator-agent.ts +568 -0
- package/src/api/error-handling.ts +1758 -0
- package/src/api/natural-language-mapper.ts +630 -0
- package/src/api/performance-optimizer.ts +891 -0
- package/src/api/transaction-manager.ts +754 -0
- package/src/cli/deploy-artifact.ts +304 -0
- package/src/cli/snow-flow-cli-integration.ts +434 -0
- package/src/cli.ts +4455 -0
- package/src/cli.ts.bak +5616 -0
- package/src/compliance/advanced-compliance-system.ts +1268 -0
- package/src/compliance/index.ts +19 -0
- package/src/config/snow-flow-config.ts +1019 -0
- package/src/documentation/index.ts +16 -0
- package/src/documentation/self-documenting-system.ts +1421 -0
- package/src/dynamic-version.ts +44 -0
- package/src/healing/index.ts +20 -0
- package/src/healing/self-healing-system.ts +1435 -0
- package/src/health/README.md +161 -0
- package/src/health/system-health.ts +995 -0
- package/src/index.ts +60 -0
- package/src/intelligence/acl-analyzer.ts +377 -0
- package/src/intelligence/auto-resolution-engine.ts +643 -0
- package/src/intelligence/gap-analysis-engine.ts +488 -0
- package/src/intelligence/manual-instructions-generator.ts +744 -0
- package/src/intelligence/mcp-coverage-analyzer.ts +708 -0
- package/src/intelligence/multi-pass-requirements-analyzer.ts +603 -0
- package/src/intelligence/performance-recommendations-engine.ts +1223 -0
- package/src/intelligence/requirements-analyzer.ts +1148 -0
- package/src/intelligence/task-analyzer.ts +628 -0
- package/src/managers/scope-manager.ts +555 -0
- package/src/mcp/advanced/servicenow-advanced-features-mcp.ts +16110 -0
- package/src/mcp/base-mcp-server.ts +660 -0
- package/src/mcp/http-transport-wrapper.ts +426 -0
- package/src/mcp/service-discovery-client.ts +312 -0
- package/src/mcp/servicenow-automation-mcp-refactored.ts +678 -0
- package/src/mcp/servicenow-automation-mcp.ts +838 -0
- package/src/mcp/servicenow-deployment-mcp-refactored.ts +1292 -0
- package/src/mcp/servicenow-deployment-mcp.ts +7244 -0
- package/src/mcp/servicenow-graph-memory-mcp-refactored.ts +721 -0
- package/src/mcp/servicenow-graph-memory-mcp.ts +832 -0
- package/src/mcp/servicenow-integration-mcp-refactored.ts +655 -0
- package/src/mcp/servicenow-integration-mcp.ts +819 -0
- package/src/mcp/servicenow-intelligent-mcp-refactored.ts +977 -0
- package/src/mcp/servicenow-intelligent-mcp.ts +4638 -0
- package/src/mcp/servicenow-mcp-server.ts +728 -0
- package/src/mcp/servicenow-memory-mcp.ts +474 -0
- package/src/mcp/servicenow-operations-mcp-refactored.ts +1995 -0
- package/src/mcp/servicenow-operations-mcp.ts +3384 -0
- package/src/mcp/servicenow-platform-development-mcp-refactored.ts +611 -0
- package/src/mcp/servicenow-platform-development-mcp.ts +970 -0
- package/src/mcp/servicenow-progressive-indexer.ts +370 -0
- package/src/mcp/servicenow-reporting-analytics-mcp-refactored.ts +695 -0
- package/src/mcp/servicenow-reporting-analytics-mcp.ts +1123 -0
- package/src/mcp/servicenow-security-compliance-mcp-refactored.ts +642 -0
- package/src/mcp/servicenow-security-compliance-mcp.ts +1157 -0
- package/src/mcp/servicenow-update-set-mcp-refactored.ts +751 -0
- package/src/mcp/servicenow-update-set-mcp.ts +811 -0
- package/src/mcp/shared/agent-context-provider.ts +365 -0
- package/src/mcp/shared/base-mcp-server.ts +2463 -0
- package/src/mcp/shared/mcp-memory-manager.ts +540 -0
- package/src/mcp/shared/mcp-resource-manager.ts +367 -0
- package/src/mcp/snow-flow-mcp.ts +911 -0
- package/src/mcp/start-all-mcp-servers.ts +102 -0
- package/src/mcp/start-servicenow-mcp.ts +67 -0
- package/src/monitoring/enhanced-monitoring-system.ts +1345 -0
- package/src/monitoring/performance-tracker.ts +777 -0
- package/src/optimization/cost-optimization-engine.ts +1125 -0
- package/src/optimization/index.ts +10 -0
- package/src/queen/README.md +403 -0
- package/src/queen/agent-factory.ts +574 -0
- package/src/queen/index.ts +94 -0
- package/src/queen/mcp-execution-bridge.ts +681 -0
- package/src/queen/neural-learning.ts +319 -0
- package/src/queen/parallel-agent-engine.ts +848 -0
- package/src/queen/queen-memory-system.ts +490 -0
- package/src/queen/queen-memory.ts +456 -0
- package/src/queen/servicenow-queen.ts +1029 -0
- package/src/queen/types.ts +87 -0
- package/src/rollback/smart-rollback-system.ts +866 -0
- package/src/schemas/deployment.schema.json +58 -0
- package/src/schemas/flow.schema.json +79 -0
- package/src/schemas/widget.schema.json +72 -0
- package/src/snow-flow-system.ts +541 -0
- package/src/sparc/sparc-help.ts +49 -0
- package/src/sparc/team-sparc.ts +88 -0
- package/src/strategies/global-scope-strategy.ts +736 -0
- package/src/templates/base/application.template.json +45 -0
- package/src/templates/base/business_rule.template.json +33 -0
- package/src/templates/base/script_include.template.json +18 -0
- package/src/templates/base/table.template.json +64 -0
- package/src/templates/base/widget.template.json +25 -0
- package/src/templates/patterns/composite.incident-management.template.json +140 -0
- package/src/templates/patterns/widget.dashboard.template.json +238 -0
- package/src/templates/patterns/widget.datatable.template.json +292 -0
- package/src/testing/integration-test-suite.ts +1276 -0
- package/src/types/index.ts +183 -0
- package/src/types/neo4j-driver.d.ts +23 -0
- package/src/types/servicenow.types.ts +307 -0
- package/src/types/snow-flow.types.ts +186 -0
- package/src/types/todo.types.ts +70 -0
- package/src/utils/action-type-cache.ts +286 -0
- package/src/utils/agent-detector.ts +573 -0
- package/src/utils/artifact-tracker.ts +379 -0
- package/src/utils/dependency-detector.ts +233 -0
- package/src/utils/deployment-metadata-handler.ts +518 -0
- package/src/utils/error-recovery.ts +680 -0
- package/src/utils/logger.ts +60 -0
- package/src/utils/mcp-auth-middleware.ts +262 -0
- package/src/utils/mcp-config-manager.ts +270 -0
- package/src/utils/mcp-server-manager.ts +446 -0
- package/src/utils/mcp-tool-registry.ts +298 -0
- package/src/utils/migrate-snow-flow.ts +98 -0
- package/src/utils/oauth-html-templates.ts +188 -0
- package/src/utils/scope-utils.ts +443 -0
- package/src/utils/servicenow-client.ts +3321 -0
- package/src/utils/servicenow-id-generator.ts +181 -0
- package/src/utils/snow-memory-manager.ts +605 -0
- package/src/utils/snow-oauth.ts +797 -0
- package/src/utils/template-engine.ts +463 -0
- package/src/utils/theme-manager.ts +295 -0
- package/src/utils/unified-auth-store.ts +222 -0
- package/src/utils/update-set-importer.ts +422 -0
- package/src/utils/update-set-xml-packager.ts +371 -0
- package/src/utils/widget-template-generator.ts +1744 -0
- package/src/version.ts +1950 -0
- package/.claude/commands/memory/README.md +0 -9
- package/dist/agents/app-creator.agent.d.ts.map +0 -1
- package/dist/agents/app-creator.agent.js.map +0 -1
- package/dist/agents/base/base-snow-agent.d.ts.map +0 -1
- package/dist/agents/base/base-snow-agent.js.map +0 -1
- package/dist/agents/base-agent.d.ts.map +0 -1
- package/dist/agents/base-agent.js.map +0 -1
- package/dist/agents/base-snow-agent.d.ts.map +0 -1
- package/dist/agents/base-snow-agent.js.map +0 -1
- package/dist/agents/coordinator.d.ts.map +0 -1
- package/dist/agents/coordinator.js.map +0 -1
- package/dist/agents/flow-builder-agent.d.ts.map +0 -1
- package/dist/agents/flow-builder-agent.js.map +0 -1
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/queen-403-handler.d.ts.map +0 -1
- package/dist/agents/queen-403-handler.js.map +0 -1
- package/dist/agents/queen-agent-example.d.ts.map +0 -1
- package/dist/agents/queen-agent-example.js.map +0 -1
- package/dist/agents/queen-agent.d.ts.map +0 -1
- package/dist/agents/queen-agent.js.map +0 -1
- package/dist/agents/queen-agent.test.d.ts.map +0 -1
- package/dist/agents/queen-agent.test.js.map +0 -1
- package/dist/agents/script-generator.agent.d.ts.map +0 -1
- package/dist/agents/script-generator.agent.js.map +0 -1
- package/dist/agents/script-writer-agent.d.ts.map +0 -1
- package/dist/agents/script-writer-agent.js.map +0 -1
- package/dist/agents/security-agent.d.ts.map +0 -1
- package/dist/agents/security-agent.js.map +0 -1
- package/dist/agents/specialists/automation-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/automation-specialist.agent.js.map +0 -1
- package/dist/agents/specialists/data-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/data-specialist.agent.js.map +0 -1
- package/dist/agents/specialists/integration-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/integration-specialist.agent.js.map +0 -1
- package/dist/agents/specialists/reporting-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/reporting-specialist.agent.js.map +0 -1
- package/dist/agents/specialists/security-specialist.agent.d.ts.map +0 -1
- package/dist/agents/specialists/security-specialist.agent.js.map +0 -1
- package/dist/agents/teams/adaptive/adaptive-coordinator.agent.d.ts.map +0 -1
- package/dist/agents/teams/adaptive/adaptive-coordinator.agent.js.map +0 -1
- package/dist/agents/teams/base-team.d.ts.map +0 -1
- package/dist/agents/teams/base-team.js.map +0 -1
- package/dist/agents/teams/team-types.d.ts.map +0 -1
- package/dist/agents/teams/team-types.js.map +0 -1
- package/dist/agents/teams/widget/widget-architect.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-architect.agent.js.map +0 -1
- package/dist/agents/teams/widget/widget-backend.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-backend.agent.js.map +0 -1
- package/dist/agents/teams/widget/widget-frontend.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-frontend.agent.js.map +0 -1
- package/dist/agents/teams/widget/widget-platform.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-platform.agent.js.map +0 -1
- package/dist/agents/teams/widget/widget-uiux.agent.d.ts.map +0 -1
- package/dist/agents/teams/widget/widget-uiux.agent.js.map +0 -1
- package/dist/agents/test-agent.d.ts.map +0 -1
- package/dist/agents/test-agent.js.map +0 -1
- package/dist/agents/test-agents.d.ts.map +0 -1
- package/dist/agents/test-agents.js.map +0 -1
- package/dist/agents/ui-builder.agent.d.ts.map +0 -1
- package/dist/agents/ui-builder.agent.js.map +0 -1
- package/dist/agents/widget-builder.agent.d.ts.map +0 -1
- package/dist/agents/widget-builder.agent.js.map +0 -1
- package/dist/agents/widget-creator-agent.d.ts.map +0 -1
- package/dist/agents/widget-creator-agent.js.map +0 -1
- package/dist/agents/workflow-designer.agent.d.ts.map +0 -1
- package/dist/agents/workflow-designer.agent.js.map +0 -1
- package/dist/api/error-handling.d.ts.map +0 -1
- package/dist/api/error-handling.js.map +0 -1
- package/dist/api/flow-designer-api.d.ts.map +0 -1
- package/dist/api/flow-designer-api.js.map +0 -1
- package/dist/api/natural-language-mapper.d.ts.map +0 -1
- package/dist/api/natural-language-mapper.js.map +0 -1
- package/dist/api/performance-optimizer.d.ts.map +0 -1
- package/dist/api/performance-optimizer.js.map +0 -1
- package/dist/api/transaction-manager.d.ts.map +0 -1
- package/dist/api/transaction-manager.js.map +0 -1
- package/dist/assembly/team-assembler.d.ts.map +0 -1
- package/dist/assembly/team-assembler.js.map +0 -1
- package/dist/cli/deploy-artifact.d.ts.map +0 -1
- package/dist/cli/deploy-artifact.js.map +0 -1
- package/dist/cli/snow-flow-cli-integration.d.ts.map +0 -1
- package/dist/cli/snow-flow-cli-integration.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/compliance/advanced-compliance-system.d.ts.map +0 -1
- package/dist/compliance/advanced-compliance-system.js.map +0 -1
- package/dist/compliance/index.d.ts.map +0 -1
- package/dist/compliance/index.js.map +0 -1
- package/dist/config/snow-flow-config.d.ts.map +0 -1
- package/dist/config/snow-flow-config.js.map +0 -1
- package/dist/documentation/index.d.ts.map +0 -1
- package/dist/documentation/index.js.map +0 -1
- package/dist/documentation/self-documenting-system.d.ts.map +0 -1
- package/dist/documentation/self-documenting-system.js.map +0 -1
- package/dist/dynamic-version.d.ts.map +0 -1
- package/dist/dynamic-version.js.map +0 -1
- package/dist/healing/index.d.ts.map +0 -1
- package/dist/healing/index.js.map +0 -1
- package/dist/healing/self-healing-system.d.ts.map +0 -1
- package/dist/healing/self-healing-system.js.map +0 -1
- package/dist/health/system-health.d.ts.map +0 -1
- package/dist/health/system-health.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/intelligence/acl-analyzer.d.ts.map +0 -1
- package/dist/intelligence/acl-analyzer.js.map +0 -1
- package/dist/intelligence/auto-resolution-engine.d.ts.map +0 -1
- package/dist/intelligence/auto-resolution-engine.js.map +0 -1
- package/dist/intelligence/gap-analysis-engine.d.ts.map +0 -1
- package/dist/intelligence/gap-analysis-engine.js.map +0 -1
- package/dist/intelligence/manual-instructions-generator.d.ts.map +0 -1
- package/dist/intelligence/manual-instructions-generator.js.map +0 -1
- package/dist/intelligence/mcp-coverage-analyzer.d.ts.map +0 -1
- package/dist/intelligence/mcp-coverage-analyzer.js.map +0 -1
- package/dist/intelligence/multi-pass-requirements-analyzer.d.ts.map +0 -1
- package/dist/intelligence/multi-pass-requirements-analyzer.js.map +0 -1
- package/dist/intelligence/performance-recommendations-engine.d.ts.map +0 -1
- package/dist/intelligence/performance-recommendations-engine.js.map +0 -1
- package/dist/intelligence/requirements-analyzer.d.ts.map +0 -1
- package/dist/intelligence/requirements-analyzer.js.map +0 -1
- package/dist/intelligence/task-analyzer.d.ts.map +0 -1
- package/dist/intelligence/task-analyzer.js.map +0 -1
- package/dist/managers/scope-manager.d.ts.map +0 -1
- package/dist/managers/scope-manager.js.map +0 -1
- package/dist/mcp/advanced/servicenow-advanced-features-mcp.d.ts.map +0 -1
- package/dist/mcp/advanced/servicenow-advanced-features-mcp.js.map +0 -1
- package/dist/mcp/base-mcp-server.d.ts.map +0 -1
- package/dist/mcp/base-mcp-server.js.map +0 -1
- package/dist/mcp/example-refactored-server.d.ts.map +0 -1
- package/dist/mcp/example-refactored-server.js.map +0 -1
- package/dist/mcp/http-transport-wrapper.d.ts.map +0 -1
- package/dist/mcp/http-transport-wrapper.js.map +0 -1
- package/dist/mcp/mcp-wrapper.d.ts.map +0 -1
- package/dist/mcp/mcp-wrapper.js.map +0 -1
- package/dist/mcp/service-discovery-client.d.ts.map +0 -1
- package/dist/mcp/service-discovery-client.js.map +0 -1
- package/dist/mcp/servicenow-automation-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-automation-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-automation-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-automation-mcp.js.map +0 -1
- package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-deployment-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-deployment-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-deployment-mcp.js.map +0 -1
- package/dist/mcp/servicenow-flow-composer-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-flow-composer-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-flow-composer-mcp.js.map +0 -1
- package/dist/mcp/servicenow-graph-memory-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-graph-memory-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-graph-memory-mcp.js.map +0 -1
- package/dist/mcp/servicenow-integration-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-integration-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-integration-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-integration-mcp.js.map +0 -1
- package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-intelligent-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-intelligent-mcp.js.map +0 -1
- package/dist/mcp/servicenow-mcp-server.d.ts.map +0 -1
- package/dist/mcp/servicenow-mcp-server.js.map +0 -1
- package/dist/mcp/servicenow-memory-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-memory-mcp.js.map +0 -1
- package/dist/mcp/servicenow-operations-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-operations-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-operations-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-operations-mcp.js.map +0 -1
- package/dist/mcp/servicenow-platform-development-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-platform-development-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-platform-development-mcp.js.map +0 -1
- package/dist/mcp/servicenow-progressive-indexer.d.ts.map +0 -1
- package/dist/mcp/servicenow-progressive-indexer.js.map +0 -1
- package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +0 -1
- package/dist/mcp/servicenow-security-compliance-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-security-compliance-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-security-compliance-mcp.js.map +0 -1
- package/dist/mcp/servicenow-update-set-mcp-refactored.d.ts.map +0 -1
- package/dist/mcp/servicenow-update-set-mcp-refactored.js.map +0 -1
- package/dist/mcp/servicenow-update-set-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-update-set-mcp.js.map +0 -1
- package/dist/mcp/servicenow-xml-flow-mcp.d.ts.map +0 -1
- package/dist/mcp/servicenow-xml-flow-mcp.js.map +0 -1
- package/dist/mcp/shared/agent-context-provider.d.ts.map +0 -1
- package/dist/mcp/shared/agent-context-provider.js.map +0 -1
- package/dist/mcp/shared/base-mcp-server.d.ts.map +0 -1
- package/dist/mcp/shared/base-mcp-server.js.map +0 -1
- package/dist/mcp/shared/mcp-memory-manager.d.ts.map +0 -1
- package/dist/mcp/shared/mcp-memory-manager.js.map +0 -1
- package/dist/mcp/shared/mcp-resource-manager.d.ts.map +0 -1
- package/dist/mcp/shared/mcp-resource-manager.js.map +0 -1
- package/dist/mcp/snow-flow-mcp.d.ts.map +0 -1
- package/dist/mcp/snow-flow-mcp.js.map +0 -1
- package/dist/mcp/start-all-mcp-servers.d.ts.map +0 -1
- package/dist/mcp/start-all-mcp-servers.js.map +0 -1
- package/dist/mcp/start-servicenow-mcp.d.ts.map +0 -1
- package/dist/mcp/start-servicenow-mcp.js.map +0 -1
- package/dist/mcp/test-simple-mcp.d.ts.map +0 -1
- package/dist/mcp/test-simple-mcp.js.map +0 -1
- package/dist/memory/hierarchical-memory-system.d.ts +0 -90
- package/dist/memory/hierarchical-memory-system.d.ts.map +0 -1
- package/dist/memory/hierarchical-memory-system.js +0 -400
- package/dist/memory/hierarchical-memory-system.js.map +0 -1
- package/dist/memory/index.d.ts +0 -9
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js +0 -20
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/mcp-integration-example.d.ts +0 -6
- package/dist/memory/mcp-integration-example.d.ts.map +0 -1
- package/dist/memory/mcp-integration-example.js +0 -281
- package/dist/memory/mcp-integration-example.js.map +0 -1
- package/dist/memory/memory-client.d.ts +0 -199
- package/dist/memory/memory-client.d.ts.map +0 -1
- package/dist/memory/memory-client.js +0 -364
- package/dist/memory/memory-client.js.map +0 -1
- package/dist/memory/memory-manager.d.ts +0 -29
- package/dist/memory/memory-manager.d.ts.map +0 -1
- package/dist/memory/memory-manager.js +0 -280
- package/dist/memory/memory-manager.js.map +0 -1
- package/dist/memory/memory-operations.d.ts +0 -179
- package/dist/memory/memory-operations.d.ts.map +0 -1
- package/dist/memory/memory-operations.js +0 -691
- package/dist/memory/memory-operations.js.map +0 -1
- package/dist/memory/memory-system.d.ts +0 -152
- package/dist/memory/memory-system.d.ts.map +0 -1
- package/dist/memory/memory-system.js +0 -632
- package/dist/memory/memory-system.js.map +0 -1
- package/dist/memory/memory-test.d.ts +0 -6
- package/dist/memory/memory-test.d.ts.map +0 -1
- package/dist/memory/memory-test.js +0 -161
- package/dist/memory/memory-test.js.map +0 -1
- package/dist/memory/servicenow-artifact-indexer.d.ts +0 -119
- package/dist/memory/servicenow-artifact-indexer.d.ts.map +0 -1
- package/dist/memory/servicenow-artifact-indexer.js +0 -560
- package/dist/memory/servicenow-artifact-indexer.js.map +0 -1
- package/dist/memory/snow-flow-memory-patterns.d.ts +0 -213
- package/dist/memory/snow-flow-memory-patterns.d.ts.map +0 -1
- package/dist/memory/snow-flow-memory-patterns.js +0 -200
- package/dist/memory/snow-flow-memory-patterns.js.map +0 -1
- package/dist/memory/snow-memory.d.ts +0 -54
- package/dist/memory/snow-memory.d.ts.map +0 -1
- package/dist/memory/snow-memory.js +0 -301
- package/dist/memory/snow-memory.js.map +0 -1
- package/dist/memory/swarm-memory.d.ts +0 -135
- package/dist/memory/swarm-memory.d.ts.map +0 -1
- package/dist/memory/swarm-memory.js +0 -378
- package/dist/memory/swarm-memory.js.map +0 -1
- package/dist/monitoring/enhanced-monitoring-system.d.ts.map +0 -1
- package/dist/monitoring/enhanced-monitoring-system.js.map +0 -1
- package/dist/monitoring/performance-tracker.d.ts.map +0 -1
- package/dist/monitoring/performance-tracker.js.map +0 -1
- package/dist/optimization/cost-optimization-engine.d.ts.map +0 -1
- package/dist/optimization/cost-optimization-engine.js.map +0 -1
- package/dist/optimization/index.d.ts.map +0 -1
- package/dist/optimization/index.js.map +0 -1
- package/dist/orchestration/discovery/service-discovery.d.ts.map +0 -1
- package/dist/orchestration/discovery/service-discovery.js.map +0 -1
- package/dist/orchestration/distributed-orchestrator.d.ts.map +0 -1
- package/dist/orchestration/distributed-orchestrator.js.map +0 -1
- package/dist/orchestration/distribution/task-distribution-engine.d.ts.map +0 -1
- package/dist/orchestration/distribution/task-distribution-engine.js.map +0 -1
- package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts.map +0 -1
- package/dist/orchestration/interfaces/distributed-orchestration.interface.js.map +0 -1
- package/dist/orchestration/protocols/mcpx-protocol.d.ts.map +0 -1
- package/dist/orchestration/protocols/mcpx-protocol.js.map +0 -1
- package/dist/orchestration/state/distributed-state-manager.d.ts.map +0 -1
- package/dist/orchestration/state/distributed-state-manager.js.map +0 -1
- package/dist/orchestrator/flow-composer.d.ts.map +0 -1
- package/dist/orchestrator/flow-composer.js.map +0 -1
- package/dist/orchestrator/flow-pattern-templates.d.ts.map +0 -1
- package/dist/orchestrator/flow-pattern-templates.js.map +0 -1
- package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +0 -1
- package/dist/orchestrator/flow-subflow-decision-engine.js.map +0 -1
- package/dist/orchestrator/flow-validation-engine.d.ts.map +0 -1
- package/dist/orchestrator/flow-validation-engine.js.map +0 -1
- package/dist/orchestrator/snow-orchestrator.d.ts.map +0 -1
- package/dist/orchestrator/snow-orchestrator.js.map +0 -1
- package/dist/orchestrator/subflow-creation-handler.d.ts.map +0 -1
- package/dist/orchestrator/subflow-creation-handler.js.map +0 -1
- package/dist/patterns/adaptive-patterns.d.ts.map +0 -1
- package/dist/patterns/adaptive-patterns.js.map +0 -1
- package/dist/queen/advanced-integration-test.d.ts.map +0 -1
- package/dist/queen/advanced-integration-test.js.map +0 -1
- package/dist/queen/agent-factory.d.ts.map +0 -1
- package/dist/queen/agent-factory.js.map +0 -1
- package/dist/queen/index.d.ts.map +0 -1
- package/dist/queen/index.js.map +0 -1
- package/dist/queen/integration-example.d.ts.map +0 -1
- package/dist/queen/integration-example.js.map +0 -1
- package/dist/queen/integration-test.d.ts.map +0 -1
- package/dist/queen/integration-test.js.map +0 -1
- package/dist/queen/mcp-execution-bridge.d.ts.map +0 -1
- package/dist/queen/mcp-execution-bridge.js.map +0 -1
- package/dist/queen/mock-mcp-client.d.ts.map +0 -1
- package/dist/queen/mock-mcp-client.js.map +0 -1
- package/dist/queen/neural-learning.d.ts.map +0 -1
- package/dist/queen/neural-learning.js.map +0 -1
- package/dist/queen/parallel-agent-engine.d.ts.map +0 -1
- package/dist/queen/parallel-agent-engine.js.map +0 -1
- package/dist/queen/queen-memory-system.d.ts.map +0 -1
- package/dist/queen/queen-memory-system.js.map +0 -1
- package/dist/queen/queen-memory.d.ts.map +0 -1
- package/dist/queen/queen-memory.js.map +0 -1
- package/dist/queen/run-integration-tests.d.ts.map +0 -1
- package/dist/queen/run-integration-tests.js.map +0 -1
- package/dist/queen/servicenow-queen.d.ts.map +0 -1
- package/dist/queen/servicenow-queen.js.map +0 -1
- package/dist/queen/types.d.ts.map +0 -1
- package/dist/queen/types.js.map +0 -1
- package/dist/rollback/smart-rollback-system.d.ts.map +0 -1
- package/dist/rollback/smart-rollback-system.js.map +0 -1
- package/dist/snow-flow-system.d.ts.map +0 -1
- package/dist/snow-flow-system.js.map +0 -1
- package/dist/sparc/coordinators/adaptive-coordinator.d.ts.map +0 -1
- package/dist/sparc/coordinators/adaptive-coordinator.js.map +0 -1
- package/dist/sparc/coordinators/team-coordinator.d.ts.map +0 -1
- package/dist/sparc/coordinators/team-coordinator.js.map +0 -1
- package/dist/sparc/modes/team-modes.d.ts.map +0 -1
- package/dist/sparc/modes/team-modes.js.map +0 -1
- package/dist/sparc/sparc-help.d.ts.map +0 -1
- package/dist/sparc/sparc-help.js.map +0 -1
- package/dist/sparc/team-sparc.d.ts.map +0 -1
- package/dist/sparc/team-sparc.js.map +0 -1
- package/dist/sparc/teams/application-team.d.ts.map +0 -1
- package/dist/sparc/teams/application-team.js.map +0 -1
- package/dist/sparc/teams/flow-team.d.ts.map +0 -1
- package/dist/sparc/teams/flow-team.js.map +0 -1
- package/dist/sparc/teams/widget-team.d.ts.map +0 -1
- package/dist/sparc/teams/widget-team.js.map +0 -1
- package/dist/specialists/app-specialists.d.ts.map +0 -1
- package/dist/specialists/app-specialists.js.map +0 -1
- package/dist/specialists/base-specialist.d.ts.map +0 -1
- package/dist/specialists/base-specialist.js.map +0 -1
- package/dist/specialists/flow-specialists.d.ts.map +0 -1
- package/dist/specialists/flow-specialists.js.map +0 -1
- package/dist/specialists/individual-specialists.d.ts.map +0 -1
- package/dist/specialists/individual-specialists.js.map +0 -1
- package/dist/specialists/widget-specialists.d.ts.map +0 -1
- package/dist/specialists/widget-specialists.js.map +0 -1
- package/dist/strategies/global-scope-strategy.d.ts.map +0 -1
- package/dist/strategies/global-scope-strategy.js.map +0 -1
- package/dist/teams/adaptive-team.d.ts.map +0 -1
- package/dist/teams/adaptive-team.js.map +0 -1
- package/dist/teams/application-team.d.ts.map +0 -1
- package/dist/teams/application-team.js.map +0 -1
- package/dist/teams/base-team.d.ts.map +0 -1
- package/dist/teams/base-team.js.map +0 -1
- package/dist/teams/flow-team.d.ts.map +0 -1
- package/dist/teams/flow-team.js.map +0 -1
- package/dist/teams/widget-team.d.ts.map +0 -1
- package/dist/teams/widget-team.js.map +0 -1
- package/dist/testing/integration-test-suite.d.ts.map +0 -1
- package/dist/testing/integration-test-suite.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/servicenow.types.d.ts.map +0 -1
- package/dist/types/servicenow.types.js.map +0 -1
- package/dist/types/snow-flow.types.d.ts.map +0 -1
- package/dist/types/snow-flow.types.js.map +0 -1
- package/dist/types/todo.types.d.ts.map +0 -1
- package/dist/types/todo.types.js.map +0 -1
- package/dist/utils/action-type-cache.d.ts.map +0 -1
- package/dist/utils/action-type-cache.js.map +0 -1
- package/dist/utils/agent-detector.d.ts.map +0 -1
- package/dist/utils/agent-detector.js.map +0 -1
- package/dist/utils/artifact-tracker.d.ts.map +0 -1
- package/dist/utils/artifact-tracker.js.map +0 -1
- package/dist/utils/dependency-detector.d.ts.map +0 -1
- package/dist/utils/dependency-detector.js.map +0 -1
- package/dist/utils/deployment-metadata-handler.d.ts.map +0 -1
- package/dist/utils/deployment-metadata-handler.js.map +0 -1
- package/dist/utils/error-recovery.d.ts.map +0 -1
- package/dist/utils/error-recovery.js.map +0 -1
- package/dist/utils/flow-api-discovery.d.ts.map +0 -1
- package/dist/utils/flow-api-discovery.js.map +0 -1
- package/dist/utils/flow-xml-generator.d.ts.map +0 -1
- package/dist/utils/flow-xml-generator.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/mcp-auth-middleware.d.ts.map +0 -1
- package/dist/utils/mcp-auth-middleware.js.map +0 -1
- package/dist/utils/mcp-config-manager.d.ts.map +0 -1
- package/dist/utils/mcp-config-manager.js.map +0 -1
- package/dist/utils/mcp-server-manager.d.ts.map +0 -1
- package/dist/utils/mcp-server-manager.js.map +0 -1
- package/dist/utils/mcp-tool-registry.d.ts.map +0 -1
- package/dist/utils/mcp-tool-registry.js.map +0 -1
- package/dist/utils/migrate-claude-flow.d.ts.map +0 -1
- package/dist/utils/migrate-claude-flow.js.map +0 -1
- package/dist/utils/migrate-snow-flow.d.ts.map +0 -1
- package/dist/utils/migrate-snow-flow.js.map +0 -1
- package/dist/utils/oauth-html-templates.d.ts.map +0 -1
- package/dist/utils/oauth-html-templates.js.map +0 -1
- package/dist/utils/scope-utils.d.ts.map +0 -1
- package/dist/utils/scope-utils.js.map +0 -1
- package/dist/utils/servicenow-client.d.ts.map +0 -1
- package/dist/utils/servicenow-client.js.map +0 -1
- package/dist/utils/servicenow-id-generator.d.ts.map +0 -1
- package/dist/utils/servicenow-id-generator.js.map +0 -1
- package/dist/utils/snow-memory-manager.d.ts.map +0 -1
- package/dist/utils/snow-memory-manager.js.map +0 -1
- package/dist/utils/snow-oauth-old.d.ts.map +0 -1
- package/dist/utils/snow-oauth-old.js.map +0 -1
- package/dist/utils/snow-oauth.d.ts.map +0 -1
- package/dist/utils/snow-oauth.js.map +0 -1
- package/dist/utils/template-engine.d.ts.map +0 -1
- package/dist/utils/template-engine.js.map +0 -1
- package/dist/utils/theme-manager.d.ts.map +0 -1
- package/dist/utils/theme-manager.js.map +0 -1
- package/dist/utils/unified-auth-store.d.ts.map +0 -1
- package/dist/utils/unified-auth-store.js.map +0 -1
- package/dist/utils/update-set-importer.d.ts.map +0 -1
- package/dist/utils/update-set-importer.js.map +0 -1
- package/dist/utils/update-set-xml-packager.d.ts.map +0 -1
- package/dist/utils/update-set-xml-packager.js.map +0 -1
- package/dist/utils/widget-template-generator.d.ts.map +0 -1
- package/dist/utils/widget-template-generator.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/memory/agents/README.md +0 -31
- package/memory/claude-flow-data.json +0 -5
- package/memory/servicenow_artifacts/000d9224c895221055906c7518aa2d3d.json +0 -30
- package/memory/servicenow_artifacts/0196b66173303010e46b4a2214f6a7a2.json +0 -36
- package/memory/servicenow_artifacts/125e5d1d837e2a102a7ea130ceaad397.json +0 -30
- package/memory/servicenow_artifacts/7637c1f2b7112210a5e5911cde11a972.json +0 -30
- package/memory/servicenow_artifacts/default_documentation_tables_1754056582292.json +0 -55
- package/memory/servicenow_artifacts/default_documentation_tables_1754057477189.json +0 -55
- package/memory/sessions/README.md +0 -32
- package/memory/update-set-sessions/01f82af583faea102a7ea130ceaad3d4.json +0 -9
- package/memory/update-set-sessions/27718fb983faea102a7ea130ceaad34b.json +0 -9
- package/memory/update-set-sessions/412e9bf6833e22502a7ea130ceaad30a.json +0 -8
- package/memory/update-set-sessions/66fc5a79837aea102a7ea130ceaad3ab.json +0 -9
- package/memory/update-set-sessions/71a30ff5837eea102a7ea130ceaad37f.json +0 -9
- package/memory/update-set-sessions/74fba27983faea102a7ea130ceaad3bd.json +0 -9
- package/memory/update-set-sessions/a0b147b5837eea102a7ea130ceaad344.json +0 -58
- 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);
|