@centrali-io/centrali-mcp 4.2.9 → 4.2.11

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.
@@ -346,7 +346,7 @@ function registerComputeTools(server, sdk) {
346
346
  triggerMetadata: zod_1.z
347
347
  .record(zod_1.z.string(), zod_1.z.any())
348
348
  .optional()
349
- .describe("Type-specific configuration. For event-driven: { event, recordSlug }. For scheduled: { scheduleType, cronExpression, timezone }. For http-trigger: auto-generated URL."),
349
+ .describe("Type-specific configuration. For event-driven: { eventType, recordSlug } where eventType is record_created | record_updated | record_deleted. For scheduled: { scheduleType, cronExpression, timezone }. For http-trigger: auto-generated URL."),
350
350
  enabled: zod_1.z.boolean().optional().describe("Whether the trigger is enabled (default: true)"),
351
351
  }, (_a) => __awaiter(this, [_a], void 0, function* ({ name, functionId, executionType, description, triggerMetadata, enabled }) {
352
352
  try {
@@ -394,9 +394,9 @@ function registerDescribeTools(server) {
394
394
  "event-driven": {
395
395
  description: "Automatically fires when a data event occurs (record created, updated, deleted).",
396
396
  event_types: [
397
- "record.created — fires after a new record is created",
398
- "record.updated — fires after a record is modified",
399
- "record.deleted — fires after a record is deleted",
397
+ "record_created — fires after a new record is created",
398
+ "record_updated — fires after a record is modified",
399
+ "record_deleted — fires after a record is deleted",
400
400
  ],
401
401
  config: "Specify the collection (structureId) and event type to listen for",
402
402
  },
@@ -459,7 +459,7 @@ function registerDescribeTools(server) {
459
459
  required_params: ["name", "functionId", "executionType"],
460
460
  optional_params: ["description", "triggerMetadata", "enabled"],
461
461
  triggerMetadata_examples: {
462
- "event-driven": { event: "record.created", recordSlug: "orders" },
462
+ "event-driven": { eventType: "record_created", recordSlug: "orders" },
463
463
  scheduled: { scheduleType: "cron", cronExpression: "0 9 * * *", timezone: "America/New_York" },
464
464
  },
465
465
  },
@@ -621,14 +621,58 @@ function registerDescribeTools(server) {
621
621
  status: "'draft' | 'active' | 'paused'",
622
622
  steps: "OrchestrationStep[] — ordered array of step definitions",
623
623
  },
624
- step_shape: {
625
- id: "UUID",
626
- name: "string step display name",
627
- functionId: "UUID — the compute function to execute",
628
- order: "numberexecution order (0-indexed)",
629
- inputMapping: "object | null — maps data from previous step outputs or orchestration input to this step's input",
630
- retryConfig: "object | null { maxRetries, delayMs } for automatic retry on failure",
631
- timeoutMs: "number | null — step execution timeout",
624
+ step_types: {
625
+ compute: {
626
+ description: "Execute a compute function",
627
+ shape: {
628
+ id: "stringunique step identifier",
629
+ type: "'compute'",
630
+ functionId: "UUIDthe compute function to execute",
631
+ inputMapping: "object | null — maps data from previous step outputs or orchestration input to this step's input",
632
+ onSuccess: "{ nextStepId: string } — step to execute on success",
633
+ onFailure: "{ nextStepId: string } | null — step to execute on failure",
634
+ retryConfig: "{ maxRetries, delayMs } | null — automatic retry on failure",
635
+ timeoutMs: "number | null — step execution timeout",
636
+ },
637
+ },
638
+ decision: {
639
+ description: "Conditional branching based on input/output values",
640
+ shape: {
641
+ id: "string — unique step identifier",
642
+ type: "'decision'",
643
+ cases: "DecisionCase[] — evaluated in order, first match wins",
644
+ defaultNextStepId: "string — step to execute if no case matches (required)",
645
+ },
646
+ decision_case_shape: {
647
+ conditions: "Condition[] — all must match (AND logic)",
648
+ nextStepId: "string — step to execute if this case matches",
649
+ },
650
+ condition_shape: {
651
+ path: "string — dot-notation path to the value (e.g., 'input.status', 'steps.validate.output.approved')",
652
+ op: "'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'in' | 'not_in'",
653
+ value: "any — the value to compare against (string, number, boolean, or array for in/not_in)",
654
+ },
655
+ example: {
656
+ id: "check-approval",
657
+ type: "decision",
658
+ cases: [
659
+ {
660
+ conditions: [{ path: "input.allApproved", op: "eq", value: true }],
661
+ nextStepId: "execute",
662
+ },
663
+ ],
664
+ defaultNextStepId: "notify-rejection",
665
+ },
666
+ },
667
+ delay: {
668
+ description: "Wait for a specified duration before continuing",
669
+ shape: {
670
+ id: "string — unique step identifier",
671
+ type: "'delay'",
672
+ delayMs: "number — milliseconds to wait",
673
+ nextStepId: "string — step to execute after the delay",
674
+ },
675
+ },
632
676
  },
633
677
  run_shape: {
634
678
  id: "UUID",
@@ -655,11 +699,30 @@ function registerDescribeTools(server) {
655
699
  required_params: ["slug", "name", "trigger", "steps"],
656
700
  optional_params: ["description"],
657
701
  trigger_example: { type: "on-demand" },
658
- step_example: {
659
- id: "validate",
660
- type: "compute",
661
- functionId: "func-uuid",
662
- onSuccess: { nextStepId: "process" },
702
+ step_examples: {
703
+ compute_step: {
704
+ id: "validate",
705
+ type: "compute",
706
+ functionId: "func-uuid",
707
+ onSuccess: { nextStepId: "check-result" },
708
+ },
709
+ decision_step: {
710
+ id: "check-result",
711
+ type: "decision",
712
+ cases: [
713
+ {
714
+ conditions: [{ path: "steps.validate.output.approved", op: "eq", value: true }],
715
+ nextStepId: "process",
716
+ },
717
+ ],
718
+ defaultNextStepId: "notify-rejection",
719
+ },
720
+ delay_step: {
721
+ id: "wait-before-retry",
722
+ type: "delay",
723
+ delayMs: 5000,
724
+ nextStepId: "retry",
725
+ },
663
726
  },
664
727
  },
665
728
  update_orchestration: {
@@ -188,7 +188,7 @@ function registerOrchestrationTools(server, sdk) {
188
188
  .describe("Trigger configuration object. Must include 'type' (on-demand, event-driven, scheduled, webhook)"),
189
189
  steps: zod_1.z
190
190
  .array(zod_1.z.record(zod_1.z.string(), zod_1.z.any()))
191
- .describe("Array of step definitions. Each step has id, type, functionId, and optional onSuccess/onFailure routing"),
191
+ .describe("Array of step definitions. Step types: 'compute' (functionId + onSuccess/onFailure), 'decision' (cases with conditions using path/op/value + defaultNextStepId), 'delay' (delayMs + nextStepId). Call describe_orchestrations for full schema."),
192
192
  }, (_a) => __awaiter(this, [_a], void 0, function* ({ slug, name, description, trigger, steps }) {
193
193
  try {
194
194
  const input = { slug, name, trigger, steps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@centrali-io/centrali-mcp",
3
- "version": "4.2.9",
3
+ "version": "4.2.11",
4
4
  "description": "Centrali MCP Server - AI assistant integration for Centrali workspaces",
5
5
  "main": "dist/index.js",
6
6
  "type": "commonjs",
@@ -389,7 +389,7 @@ export function registerComputeTools(server: McpServer, sdk: CentraliSDK) {
389
389
  triggerMetadata: z
390
390
  .record(z.string(), z.any())
391
391
  .optional()
392
- .describe("Type-specific configuration. For event-driven: { event, recordSlug }. For scheduled: { scheduleType, cronExpression, timezone }. For http-trigger: auto-generated URL."),
392
+ .describe("Type-specific configuration. For event-driven: { eventType, recordSlug } where eventType is record_created | record_updated | record_deleted. For scheduled: { scheduleType, cronExpression, timezone }. For http-trigger: auto-generated URL."),
393
393
  enabled: z.boolean().optional().describe("Whether the trigger is enabled (default: true)"),
394
394
  },
395
395
  async ({ name, functionId, executionType, description, triggerMetadata, enabled }) => {
@@ -461,9 +461,9 @@ export function registerDescribeTools(server: McpServer) {
461
461
  description:
462
462
  "Automatically fires when a data event occurs (record created, updated, deleted).",
463
463
  event_types: [
464
- "record.created — fires after a new record is created",
465
- "record.updated — fires after a record is modified",
466
- "record.deleted — fires after a record is deleted",
464
+ "record_created — fires after a new record is created",
465
+ "record_updated — fires after a record is modified",
466
+ "record_deleted — fires after a record is deleted",
467
467
  ],
468
468
  config:
469
469
  "Specify the collection (structureId) and event type to listen for",
@@ -529,7 +529,7 @@ export function registerDescribeTools(server: McpServer) {
529
529
  required_params: ["name", "functionId", "executionType"],
530
530
  optional_params: ["description", "triggerMetadata", "enabled"],
531
531
  triggerMetadata_examples: {
532
- "event-driven": { event: "record.created", recordSlug: "orders" },
532
+ "event-driven": { eventType: "record_created", recordSlug: "orders" },
533
533
  scheduled: { scheduleType: "cron", cronExpression: "0 9 * * *", timezone: "America/New_York" },
534
534
  },
535
535
  },
@@ -714,16 +714,58 @@ export function registerDescribeTools(server: McpServer) {
714
714
  status: "'draft' | 'active' | 'paused'",
715
715
  steps: "OrchestrationStep[] — ordered array of step definitions",
716
716
  },
717
- step_shape: {
718
- id: "UUID",
719
- name: "string step display name",
720
- functionId: "UUID — the compute function to execute",
721
- order: "numberexecution order (0-indexed)",
722
- inputMapping:
723
- "object | null maps data from previous step outputs or orchestration input to this step's input",
724
- retryConfig:
725
- "object | null — { maxRetries, delayMs } for automatic retry on failure",
726
- timeoutMs: "number | null — step execution timeout",
717
+ step_types: {
718
+ compute: {
719
+ description: "Execute a compute function",
720
+ shape: {
721
+ id: "stringunique step identifier",
722
+ type: "'compute'",
723
+ functionId: "UUIDthe compute function to execute",
724
+ inputMapping: "object | null — maps data from previous step outputs or orchestration input to this step's input",
725
+ onSuccess: "{ nextStepId: string } step to execute on success",
726
+ onFailure: "{ nextStepId: string } | null — step to execute on failure",
727
+ retryConfig: "{ maxRetries, delayMs } | null — automatic retry on failure",
728
+ timeoutMs: "number | null — step execution timeout",
729
+ },
730
+ },
731
+ decision: {
732
+ description: "Conditional branching based on input/output values",
733
+ shape: {
734
+ id: "string — unique step identifier",
735
+ type: "'decision'",
736
+ cases: "DecisionCase[] — evaluated in order, first match wins",
737
+ defaultNextStepId: "string — step to execute if no case matches (required)",
738
+ },
739
+ decision_case_shape: {
740
+ conditions: "Condition[] — all must match (AND logic)",
741
+ nextStepId: "string — step to execute if this case matches",
742
+ },
743
+ condition_shape: {
744
+ path: "string — dot-notation path to the value (e.g., 'input.status', 'steps.validate.output.approved')",
745
+ op: "'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'in' | 'not_in'",
746
+ value: "any — the value to compare against (string, number, boolean, or array for in/not_in)",
747
+ },
748
+ example: {
749
+ id: "check-approval",
750
+ type: "decision",
751
+ cases: [
752
+ {
753
+ conditions: [{ path: "input.allApproved", op: "eq", value: true }],
754
+ nextStepId: "execute",
755
+ },
756
+ ],
757
+ defaultNextStepId: "notify-rejection",
758
+ },
759
+ },
760
+ delay: {
761
+ description: "Wait for a specified duration before continuing",
762
+ shape: {
763
+ id: "string — unique step identifier",
764
+ type: "'delay'",
765
+ delayMs: "number — milliseconds to wait",
766
+ nextStepId: "string — step to execute after the delay",
767
+ },
768
+ },
727
769
  },
728
770
  run_shape: {
729
771
  id: "UUID",
@@ -750,11 +792,30 @@ export function registerDescribeTools(server: McpServer) {
750
792
  required_params: ["slug", "name", "trigger", "steps"],
751
793
  optional_params: ["description"],
752
794
  trigger_example: { type: "on-demand" },
753
- step_example: {
754
- id: "validate",
755
- type: "compute",
756
- functionId: "func-uuid",
757
- onSuccess: { nextStepId: "process" },
795
+ step_examples: {
796
+ compute_step: {
797
+ id: "validate",
798
+ type: "compute",
799
+ functionId: "func-uuid",
800
+ onSuccess: { nextStepId: "check-result" },
801
+ },
802
+ decision_step: {
803
+ id: "check-result",
804
+ type: "decision",
805
+ cases: [
806
+ {
807
+ conditions: [{ path: "steps.validate.output.approved", op: "eq", value: true }],
808
+ nextStepId: "process",
809
+ },
810
+ ],
811
+ defaultNextStepId: "notify-rejection",
812
+ },
813
+ delay_step: {
814
+ id: "wait-before-retry",
815
+ type: "delay",
816
+ delayMs: 5000,
817
+ nextStepId: "retry",
818
+ },
758
819
  },
759
820
  },
760
821
  update_orchestration: {
@@ -219,7 +219,7 @@ export function registerOrchestrationTools(server: McpServer, sdk: CentraliSDK)
219
219
  .describe("Trigger configuration object. Must include 'type' (on-demand, event-driven, scheduled, webhook)"),
220
220
  steps: z
221
221
  .array(z.record(z.string(), z.any()))
222
- .describe("Array of step definitions. Each step has id, type, functionId, and optional onSuccess/onFailure routing"),
222
+ .describe("Array of step definitions. Step types: 'compute' (functionId + onSuccess/onFailure), 'decision' (cases with conditions using path/op/value + defaultNextStepId), 'delay' (delayMs + nextStepId). Call describe_orchestrations for full schema."),
223
223
  },
224
224
  async ({ slug, name, description, trigger, steps }) => {
225
225
  try {