diff --git a/.ci/validation/src/index.ts b/.ci/validation/src/index.ts
index 66ce56b7..c7589196 100644
--- a/.ci/validation/src/index.ts
+++ b/.ci/validation/src/index.ts
@@ -24,7 +24,7 @@ export module SWSchemaValidator {
const ajv = new Ajv({ strict: false, allowUnionTypes: true });
addFormats(ajv);
- const workflowSchemaId = "https://serverlessworkflow.io/schemas/1.0.1/workflow.yaml";
+ const workflowSchemaId = "https://serverlessworkflow.io/schemas/1.0.2/workflow.yaml";
const schemaPath = "../../../schema";
export const defaultEncoding = "utf-8";
@@ -61,7 +61,7 @@ export module SWSchemaValidator {
const validate = ajv.getSchema(workflowSchemaId);
if (!validate) {
- throw new Error(`Failed to validate schema on workflow`);
+ throw new Error(`Unable to find schema with id '${workflowSchemaId }'`);
}
const isValid = validate(workflow);
diff --git a/.ci/validation/test/fixtures/invalid/extra-property-in-call.yaml b/.ci/validation/test/fixtures/invalid/extra-property-in-call.yaml
index 37e9c64e..cb91a7a5 100644
--- a/.ci/validation/test/fixtures/invalid/extra-property-in-call.yaml
+++ b/.ci/validation/test/fixtures/invalid/extra-property-in-call.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: two-tasks-in-one-item
version: '0.1.0'
diff --git a/.ci/validation/test/fixtures/invalid/listen-any-until-any-until.yaml b/.ci/validation/test/fixtures/invalid/listen-any-until-any-until.yaml
index 1fac9738..ac290844 100644
--- a/.ci/validation/test/fixtures/invalid/listen-any-until-any-until.yaml
+++ b/.ci/validation/test/fixtures/invalid/listen-any-until-any-until.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-any
version: '0.1.0'
diff --git a/.ci/validation/test/fixtures/invalid/two-tasks-in-one-item.yaml b/.ci/validation/test/fixtures/invalid/two-tasks-in-one-item.yaml
index 7127a681..13cbac8b 100644
--- a/.ci/validation/test/fixtures/invalid/two-tasks-in-one-item.yaml
+++ b/.ci/validation/test/fixtures/invalid/two-tasks-in-one-item.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: two-tasks-in-one-item
version: '0.1.0'
diff --git a/ctk/features/branch.feature b/ctk/features/branch.feature
index f8c22e75..e8cc7c42 100644
--- a/ctk/features/branch.feature
+++ b/ctk/features/branch.feature
@@ -8,7 +8,7 @@ Feature: Composite Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: fork
version: '1.0.0'
diff --git a/ctk/features/call.feature b/ctk/features/call.feature
index c5db44a6..30690b02 100644
--- a/ctk/features/call.feature
+++ b/ctk/features/call.feature
@@ -11,7 +11,7 @@ Feature: Call Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: http-call-with-content-output
version: '1.0.0'
@@ -40,7 +40,7 @@ Feature: Call Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: http-call-with-response-output
version: '1.0.0'
@@ -68,7 +68,7 @@ Feature: Call Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: http-call-with-basic-auth
version: '1.0.0'
@@ -98,7 +98,7 @@ Feature: Call Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: openapi-call-with-content-output
version: '1.0.0'
@@ -127,7 +127,7 @@ Feature: Call Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: openapi-call-with-response-output
version: '1.0.0'
diff --git a/ctk/features/data-flow.feature b/ctk/features/data-flow.feature
index 2406c977..daef5276 100644
--- a/ctk/features/data-flow.feature
+++ b/ctk/features/data-flow.feature
@@ -8,7 +8,7 @@ Feature: Data Flow
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: output-filtering
version: '1.0.0'
@@ -36,7 +36,7 @@ Feature: Data Flow
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: output-filtering
version: '1.0.0'
@@ -65,7 +65,7 @@ Feature: Data Flow
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: non-object-output
version: '1.0.0'
diff --git a/ctk/features/do.feature b/ctk/features/do.feature
index 4e91dc4a..41b5b238 100644
--- a/ctk/features/do.feature
+++ b/ctk/features/do.feature
@@ -8,7 +8,7 @@ Feature: Composite Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: do
version: '1.0.0'
diff --git a/ctk/features/emit.feature b/ctk/features/emit.feature
index c5bc1806..d728363a 100644
--- a/ctk/features/emit.feature
+++ b/ctk/features/emit.feature
@@ -8,7 +8,7 @@ Feature: Emit Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: emit
version: '1.0.0'
diff --git a/ctk/features/flow.feature b/ctk/features/flow.feature
index b7763186..73769ebe 100644
--- a/ctk/features/flow.feature
+++ b/ctk/features/flow.feature
@@ -7,7 +7,7 @@ Feature: Flow Directive
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: implicit-sequence
version: '1.0.0'
@@ -35,7 +35,7 @@ Feature: Flow Directive
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: explicit-sequence
version: '1.0.0'
diff --git a/ctk/features/for.feature b/ctk/features/for.feature
index a179471f..c98e9063 100644
--- a/ctk/features/for.feature
+++ b/ctk/features/for.feature
@@ -10,7 +10,7 @@ Feature: For Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: for
version: '1.0.0'
diff --git a/ctk/features/raise.feature b/ctk/features/raise.feature
index 4a497608..27fe8e03 100644
--- a/ctk/features/raise.feature
+++ b/ctk/features/raise.feature
@@ -7,7 +7,7 @@ Feature: Raise Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: raise-custom-error
version: '1.0.0'
diff --git a/ctk/features/set.feature b/ctk/features/set.feature
index 3fce850e..b54a9164 100644
--- a/ctk/features/set.feature
+++ b/ctk/features/set.feature
@@ -8,7 +8,7 @@ Feature: Set Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: set
version: '1.0.0'
diff --git a/ctk/features/switch.feature b/ctk/features/switch.feature
index 46dcf842..1d8d1b62 100644
--- a/ctk/features/switch.feature
+++ b/ctk/features/switch.feature
@@ -7,7 +7,7 @@ Feature: Switch Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: switch-match
version: '1.0.0'
@@ -52,7 +52,7 @@ Feature: Switch Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: switch-default-implicit
version: '1.0.0'
@@ -95,7 +95,7 @@ Feature: Switch Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: switch-default-implicit
version: '1.0.0'
diff --git a/ctk/features/try.feature b/ctk/features/try.feature
index 017d1de2..3d6f9978 100644
--- a/ctk/features/try.feature
+++ b/ctk/features/try.feature
@@ -11,7 +11,7 @@ Feature: Try Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: try-catch-404
version: '1.0.0'
@@ -55,7 +55,7 @@ Feature: Try Task
Given a workflow with definition:
"""yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: try-catch-503
version: '1.0.0'
diff --git a/dsl-reference.md b/dsl-reference.md
index fe5c26e7..c605988e 100644
--- a/dsl-reference.md
+++ b/dsl-reference.md
@@ -15,6 +15,7 @@
+ [HTTP](#http-call)
+ [OpenAPI](#openapi-call)
+ [A2A](#a2a-call)
+ + [MCP](#mcp-call)
- [Do](#do)
- [Emit](#emit)
- [For](#for)
@@ -162,7 +163,7 @@ Configures a workflow's runtime expression evaluation.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: order-pet
version: '0.1.0'
@@ -303,7 +304,7 @@ Enables the execution of a specified function within a workflow, allowing seamle
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: call-example
version: '0.1.0'
@@ -344,7 +345,7 @@ The [AsyncAPI Call](#asyncapi-call) enables workflows to interact with external
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: asyncapi-example
version: '0.1.0'
@@ -400,7 +401,7 @@ The [gRPC Call](#grpc-call) enables communication with external systems via the
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: grpc-example
version: '0.1.0'
@@ -439,7 +440,7 @@ The [HTTP Call](#http-call) enables workflows to interact with external services
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: http-example
version: '0.1.0'
@@ -470,7 +471,7 @@ The [OpenAPI Call](#openapi-call) enables workflows to interact with external se
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: openapi-example
version: '0.1.0'
@@ -496,7 +497,7 @@ The [A2A Call](#a2a-call) enables workflows to interact with AI agents described
| method | `string` | `yes` | The A2A JSON-RPC method to send.
*Supported values are: `message/send`, `message/stream`, `tasks/get`, `tasks/list`, `tasks/cancel`, `tasks/resubscribe`, `tasks/pushNotificationConfig/set`, `tasks/pushNotificationConfig/get`, `tasks/pushNotificationConfig/list`, `tasks/pushNotificationConfig/delete`, and `agent/getAuthenticatedExtendedCard`* |
| agentCard | [`externalResource`](#external-resource) | `no` | The AgentCard resource that describes the agent to call.
*Required if `server` has not been set.* |
| server | `string`\|[`endpoint`](#endpoint) | `no` | An URI or an object that describes the A2A server to call.
*Required if `agentCard` has not been set, otherwise ignored* |
-| parameters | `map`
`string` | `no` | The parameters for the A2A RPC method. For the `message/send` and `message/stream` methods, runtimes must default `message.messageId` to a uuid and `message.role` to `user`.
*Can be an object or a direct runtime expression.* |
+| parameters | `map`
`string` | `no` | The parameters for the A2A RPC method. For the `message/send` and `message/stream` methods, runtimes must default `message.messageId` to a uuid and `message.role` to `user`.
*Supports [runtime expressions](dsl.md#runtime-expressions).* |
> [!NOTE]
> The `security` and `securitySchemes` fields of the AgentCard contain authentication requirements and schemes for when communicating with the agent.
@@ -509,7 +510,7 @@ The [A2A Call](#a2a-call) enables workflows to interact with AI agents described
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: a2a-example
version: '0.1.0'
@@ -527,6 +528,56 @@ do:
text: Generate the Q1 sales report.
```
+##### MCP Call
+
+The [MCP Call](#mcp-call) enables workflows to interact with [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) servers.
+
+###### Properties
+
+| Name | Type | Required | Description|
+|:-----|:----:|:--------:|:-----------|
+| protocolVersion | `string` | `yes` | The version of the MCP protocol to use.
*Defaults to `2025-06-18`.* |
+| method | `string` | `yes` | The MCP method to call.
*Supported values are:*
*- `tools/list`: Lists available tools*
*- `tools/call`: Calls a specific tool.*
*- `prompts/list`: Lists available prompts*
*- `prompts/get`: Gets a specific prompt.*
*- `resources/list`: Lists available resources.*
*- `resources/read`: Reads a specific resource.*
*- `resources/templates/list`: Lists available resource templates* |
+| parameters | `map`
`string` | `no` | The MCP method parameters.
*Supports [runtime expressions](dsl.md#runtime-expressions).* |
+| timeout | `string`
[`duration`](#duration) | `no` | The [`duration`](#duration) after which the MCP call times out. |
+| transport | [`transport`](#mcp-transport) | `yes` | The transport to use to perform the MCP call. |
+| client | [`client`](#mcp-client) | `no` | Describes the client used to perform the MCP call. |
+
+> [!IMPORTANT]
+> Before making any MCP requests, runtimes **must** first send an `initialize` call to establish the connection.
+> In most cases, client libraries handle this initialization automatically.
+
+> [!NOTE]
+> On success the output of the call is the JSON-RPC result. On failure, runtimes must raise an error with type [https://serverlessworkflow.io/spec/1.0.0/errors/runtime](https://github.com/serverlessworkflow/specification/blob/main/dsl-reference.md#standard-error-types).
+
+###### Examples
+
+```yaml
+document:
+ dsl: '1.0.2'
+ namespace: test
+ name: mcp-example
+ version: '0.1.0'
+do:
+ - publishMessageToSlack:
+ call: mcp
+ with:
+ method: tools/call
+ parameters:
+ name: conversations_add_message
+ arguments:
+ channel_id: 'C1234567890'
+ thread_ts: '1623456789.123456'
+ payload: 'Hello, world! :wave:'
+ content_type: text/markdown
+ transport:
+ stdio:
+ command: npx
+ arguments: [ slack-mcp-server@latest, --transport, stdio ]
+ environment:
+ SLACK_MCP_XOXP_TOKEN: xoxp-xv6Cv3jKqNW8esm5YnsftKwIzoQHUzAP
+```
+
#### Do
Serves as a fundamental building block within workflows, enabling the sequential execution of multiple subtasks. By defining a series of subtasks to perform in sequence, the Do task facilitates the efficient execution of complex operations, ensuring that each subtask is completed before the next one begins.
@@ -541,7 +592,7 @@ Serves as a fundamental building block within workflows, enabling the sequential
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: do-example
version: '0.1.0'
@@ -606,7 +657,7 @@ Allows workflows to publish events to event brokers or messaging systems, facili
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: emit-example
version: '0.1.0'
@@ -644,7 +695,7 @@ Allows workflows to iterate over a collection of items, executing a defined set
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: for-example
version: '0.1.0'
@@ -681,7 +732,7 @@ Allows workflows to execute multiple subtasks concurrently, enabling parallel pr
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: fork-example
version: '0.1.0'
@@ -734,7 +785,7 @@ Provides a mechanism for workflows to await and react to external events, enabli
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-example
version: '0.1.0'
@@ -765,7 +816,7 @@ Intentionally triggers and propagates errors. By employing the "Raise" task, wor
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: raise-example
version: '0.1.0'
@@ -832,7 +883,7 @@ Provides the capability to execute external [containers](#container-process), [s
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-example
version: '0.1.0'
@@ -883,7 +934,7 @@ Enables the execution of external processes encapsulated within a containerized
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container-example
version: '0.1.0'
@@ -926,7 +977,7 @@ Enables the execution of custom scripts or code within a workflow, empowering wo
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-script-example
version: '0.1.0'
@@ -957,7 +1008,7 @@ Enables the execution of shell commands within a workflow, enabling workflows to
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-shell-example
version: '0.1.0'
@@ -984,7 +1035,7 @@ Enables the invocation and execution of nested workflows within a parent workflo
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-workflow-example
version: '0.1.0'
@@ -1013,7 +1064,7 @@ A task used to set data.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: set-example
version: '0.1.0'
@@ -1041,7 +1092,7 @@ Enables conditional branching within workflows, allowing them to dynamically sel
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: switch-example
version: '0.1.0'
@@ -1125,7 +1176,7 @@ Serves as a mechanism within workflows to handle errors gracefully, potentially
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: try-example
version: '0.1.0'
@@ -1182,7 +1233,7 @@ Allows workflows to pause or delay their execution for a specified period of tim
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: wait-example
version: '0.1.0'
@@ -1632,7 +1683,7 @@ Defines the mechanism used to authenticate users and workflows attempting to acc
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: authentication-example
version: '0.1.0'
@@ -1669,7 +1720,7 @@ Defines the fundamentals of a 'basic' authentication.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: basic-authentication-example
version: '0.1.0'
@@ -1704,7 +1755,7 @@ Defines the fundamentals of a 'bearer' authentication
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: bearer-authentication-example
version: '0.1.0'
@@ -1738,7 +1789,7 @@ Defines the fundamentals of a 'digest' authentication.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: digest-authentication-example
version: '0.1.0'
@@ -1789,7 +1840,7 @@ Defines the fundamentals of an 'oauth2' authentication.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: oauth2-authentication-example
version: '0.1.0'
@@ -1851,7 +1902,7 @@ Defines the fundamentals of an 'oidc' authentication.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: oidc-authentication-example
version: '0.1.0'
@@ -1891,7 +1942,7 @@ For more information about catalogs, refer to the [Serverless Workflow DSL docum
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: catalog-example
version: '0.1.0'
@@ -1931,7 +1982,7 @@ Extensions enable the execution of tasks prior to those they extend, offering th
*Perform logging before and after any non-extension task is run:*
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: logging-extension-example
version: '0.1.0'
@@ -1966,7 +2017,7 @@ do:
*Intercept HTTP calls to 'https://mocked.service.com' and mock its response:*
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: intercept-extension-example
version: '0.1.0'
@@ -2282,7 +2333,7 @@ Defines a workflow or task timeout.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: timeout-example
version: '0.1.0'
@@ -2424,7 +2475,7 @@ Describes the result of a process.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container-example
version: '0.1.0'
@@ -2478,7 +2529,7 @@ Configures the target server of an AsyncAPI operation.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: asyncapi-example
version: '0.1.0'
@@ -2516,7 +2567,7 @@ Configures an AsyncAPI message to publish.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: asyncapi-example
version: '0.1.0'
@@ -2581,7 +2632,7 @@ Configures a subscription to an AsyncAPI operation.
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: asyncapi-example
version: '0.1.0'
@@ -2618,7 +2669,7 @@ Configures the lifetime of an AsyncAPI subscription
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: asyncapi-example
version: '0.1.0'
@@ -2656,7 +2707,7 @@ Configures the iteration over each item (event or message) consumed by a subscri
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: asyncapi-example
version: '0.1.0'
@@ -2706,4 +2757,76 @@ References a workflow definition.
name: greet
namespace: samples
version: '0.1.0-rc2'
+```
+
+### MCP Transport
+
+Defines the transport to use for a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) call.
+
+#### Properties
+
+| Name | Type | Required | Description |
+|:-----|:----:|:--------:|:------------|
+| http | [`mcpHttpTransport`](#mcp-http-transport) | `no` | The definition of the HTTP transport to use.
*Required if `stdio` has not been set.* |
+| stdio | [`mcpStdioTransport`](#mcp-stdio-transport) | `no` | The definition of the STDIO transport to use.
*Required if `http` has not been set.* |
+| options | `map[string, string]` | `no` | A key/value mapping containing additional transport-specific configuration options, if any. |
+
+### MCP HTTP Transport
+
+Defines a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) HTTP transport.
+
+#### Properties
+
+| Name | Type | Required | Description |
+|:-----|:----:|:--------:|:------------|
+| endpoint | `string`
[`endpoint`](#endpoint) | `yes` | An URI or an object that references the MCP server endpoint to connect to.
*Supports [runtime expressions](dsl.md#runtime-expressions).* |
+| headers | `map[string, string]` | `no` | A key/value mapping of the HTTP headers to send with requests, if any. |
+
+#### Examples
+
+```yaml
+transport:
+ http:
+ endpoint: https://mcp.contoso.com
+ headers:
+ authorization: Bearer 8AE4SZgJX8tw40oJJq7VJt1plKnVnH8I
+```
+
+### MCP STDIO Transport
+
+Defines a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) STDIO transport.
+
+#### Properties
+
+| Name | Type | Required | Description |
+|:-----|:----:|:--------:|:------------|
+| command | `string` | `yes` | The command used to run the MCP server.
*Supports [runtime expressions](dsl.md#runtime-expressions).* |
+| arguments | `string[]` | `no` | An optional list of arguments to pass to the command. |
+| environment | `map[sttring, string]` | `no` | A key/value mapping, if any, of environment variables used to configure the MCP server. |
+
+#### Examples
+
+```yaml
+transport:
+ stdio:
+ command: uvx
+ arguments: [ mcp-server-fetch ]
+```
+
+### MCP Client
+
+Describes the client of a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) call.
+
+#### Properties
+
+| Name | Type | Required | Description |
+|:-----|:----:|:--------:|:------------|
+| name | `string` | `yes` | The name of the client used to connect to the MCP server. |
+| version | `string` | `yes` | The version of the client used to connect to the MCP server. |
+
+#### Examples
+
+```yaml
+name: synapse
+version: '1.0.0-alpha5.2'
```
\ No newline at end of file
diff --git a/dsl.md b/dsl.md
index d36a89ee..a133f5ab 100644
--- a/dsl.md
+++ b/dsl.md
@@ -566,7 +566,7 @@ This format ensures that the function, its version, and the catalog it belongs t
*Calling a custom function defined within a catalog:*
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: catalog-example
version: '0.1.0'
@@ -668,7 +668,7 @@ The following example demonstrates how to use the `validateEmailAddress` custom
```yaml
# workflow.yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: customFunctionWorkflow
version: '0.1.0'
@@ -736,7 +736,7 @@ See the [DSL reference](dsl-reference.md#extension) for more details about exten
*Sample logging extension:*
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: sample-workflow
version: '0.1.0'
diff --git a/examples/accumulate-room-readings.yaml b/examples/accumulate-room-readings.yaml
index a1b56c72..7ae0cb3c 100644
--- a/examples/accumulate-room-readings.yaml
+++ b/examples/accumulate-room-readings.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: accumulate-room-readings
version: '0.1.0'
diff --git a/examples/authentication-bearer-uri-format.yaml b/examples/authentication-bearer-uri-format.yaml
index 173df060..462a11cc 100644
--- a/examples/authentication-bearer-uri-format.yaml
+++ b/examples/authentication-bearer-uri-format.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: bearer-auth
version: '0.1.0'
diff --git a/examples/authentication-bearer.yaml b/examples/authentication-bearer.yaml
index 76c4e3f0..b3dfb08d 100644
--- a/examples/authentication-bearer.yaml
+++ b/examples/authentication-bearer.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: bearer-auth-uri-format
version: '0.1.0'
diff --git a/examples/authentication-oauth2-secret.yaml b/examples/authentication-oauth2-secret.yaml
index e48e6a42..1ad0176e 100644
--- a/examples/authentication-oauth2-secret.yaml
+++ b/examples/authentication-oauth2-secret.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: oauth2-authentication
version: '1.0.0'
diff --git a/examples/authentication-oauth2.yaml b/examples/authentication-oauth2.yaml
index cf166f6a..78ca66a8 100644
--- a/examples/authentication-oauth2.yaml
+++ b/examples/authentication-oauth2.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: oauth2-authentication
version: '0.1.0'
diff --git a/examples/authentication-oidc-secret.yaml b/examples/authentication-oidc-secret.yaml
index 3522308c..43e5d9d9 100644
--- a/examples/authentication-oidc-secret.yaml
+++ b/examples/authentication-oidc-secret.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: oidc-authentication
version: '1.0.0'
diff --git a/examples/authentication-oidc.yaml b/examples/authentication-oidc.yaml
index 9154eb43..65458b4f 100644
--- a/examples/authentication-oidc.yaml
+++ b/examples/authentication-oidc.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: oidc-authentication
version: '0.1.0'
diff --git a/examples/authentication-reusable.yaml b/examples/authentication-reusable.yaml
index 43049dba..48a1a749 100644
--- a/examples/authentication-reusable.yaml
+++ b/examples/authentication-reusable.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: bearer-auth
version: '0.1.0'
diff --git a/examples/call-asyncapi-publish.yaml b/examples/call-asyncapi-publish.yaml
index ed9fb8c9..98d14eb5 100644
--- a/examples/call-asyncapi-publish.yaml
+++ b/examples/call-asyncapi-publish.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: bearer-auth
version: '0.1.0'
diff --git a/examples/call-asyncapi-subscribe-consume-amount.yaml b/examples/call-asyncapi-subscribe-consume-amount.yaml
index 55ff0652..62f182db 100644
--- a/examples/call-asyncapi-subscribe-consume-amount.yaml
+++ b/examples/call-asyncapi-subscribe-consume-amount.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: bearer-auth
version: '0.1.0'
diff --git a/examples/call-asyncapi-subscribe-consume-forever-foreach.yaml b/examples/call-asyncapi-subscribe-consume-forever-foreach.yaml
index 6a7860ff..a42cfd17 100644
--- a/examples/call-asyncapi-subscribe-consume-forever-foreach.yaml
+++ b/examples/call-asyncapi-subscribe-consume-forever-foreach.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: bearer-auth
version: '0.1.0'
diff --git a/examples/call-asyncapi-subscribe-consume-until.yaml b/examples/call-asyncapi-subscribe-consume-until.yaml
index d9314980..154b5626 100644
--- a/examples/call-asyncapi-subscribe-consume-until.yaml
+++ b/examples/call-asyncapi-subscribe-consume-until.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: bearer-auth
version: '0.1.0'
diff --git a/examples/call-asyncapi-subscribe-consume-while.yaml b/examples/call-asyncapi-subscribe-consume-while.yaml
index 9fd9fd6c..c30075af 100644
--- a/examples/call-asyncapi-subscribe-consume-while.yaml
+++ b/examples/call-asyncapi-subscribe-consume-while.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: bearer-auth
version: '0.1.0'
diff --git a/examples/call-custom-function-cataloged.yaml b/examples/call-custom-function-cataloged.yaml
index 177a7929..76cfe898 100644
--- a/examples/call-custom-function-cataloged.yaml
+++ b/examples/call-custom-function-cataloged.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: samples
name: call-custom-function-cataloged
version: '0.1.0'
diff --git a/examples/call-custom-function-inline.yaml b/examples/call-custom-function-inline.yaml
index 86c2e527..7486ea8b 100644
--- a/examples/call-custom-function-inline.yaml
+++ b/examples/call-custom-function-inline.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: samples
name: call-custom-function-inline
version: '0.1.0'
diff --git a/examples/call-grpc.yaml b/examples/call-grpc.yaml
index 84fa9519..86cf556d 100644
--- a/examples/call-grpc.yaml
+++ b/examples/call-grpc.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: grpc-example
version: '0.1.0'
diff --git a/examples/call-http-endpoint-interpolation-shorthand.yaml b/examples/call-http-endpoint-interpolation-shorthand.yaml
index 33c769d7..43a7b33a 100644
--- a/examples/call-http-endpoint-interpolation-shorthand.yaml
+++ b/examples/call-http-endpoint-interpolation-shorthand.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: call-http-shorthand-endpoint
version: '0.1.0'
diff --git a/examples/call-http-endpoint-interpolation.yaml b/examples/call-http-endpoint-interpolation.yaml
index 6f18d3bf..7ce90c0c 100644
--- a/examples/call-http-endpoint-interpolation.yaml
+++ b/examples/call-http-endpoint-interpolation.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: call-http-shorthand-endpoint
version: '0.1.0'
diff --git a/examples/call-http-query-headers-expressions.yaml b/examples/call-http-query-headers-expressions.yaml
index 5ff3247f..5d41a4ca 100644
--- a/examples/call-http-query-headers-expressions.yaml
+++ b/examples/call-http-query-headers-expressions.yaml
@@ -1,6 +1,6 @@
# yaml-language-server: $schema=../schema/workflow.yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: http-query-headers-expressions
version: '1.0.0'
diff --git a/examples/call-http-query-parameters.yaml b/examples/call-http-query-parameters.yaml
index f804dd1e..e918a177 100644
--- a/examples/call-http-query-parameters.yaml
+++ b/examples/call-http-query-parameters.yaml
@@ -1,6 +1,6 @@
# yaml-language-server: $schema=../schema/workflow.yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: http-query-params
version: '1.0.0'
diff --git a/examples/call-http-redirect.yaml b/examples/call-http-redirect.yaml
index d6289745..d0621676 100644
--- a/examples/call-http-redirect.yaml
+++ b/examples/call-http-redirect.yaml
@@ -1,6 +1,6 @@
# yaml-language-server: $schema=../schema/workflow.yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: http-query-params
version: '1.0.0'
diff --git a/examples/call-mcp.yaml b/examples/call-mcp.yaml
new file mode 100644
index 00000000..ed8586f3
--- /dev/null
+++ b/examples/call-mcp.yaml
@@ -0,0 +1,23 @@
+document:
+ dsl: '1.0.2'
+ namespace: test
+ name: mcp-example
+ version: '0.1.0'
+do:
+ - publishMessageToSlack:
+ call: mcp
+ with:
+ method: tools/call
+ parameters:
+ name: conversations_add_message
+ arguments:
+ channel_id: 'C1234567890'
+ thread_ts: '1623456789.123456'
+ payload: 'Hello, world! :wave:'
+ content_type: text/markdown
+ transport:
+ stdio:
+ command: npx
+ arguments: [ slack-mcp-serverr@latest, --transport, stdio ]
+ environment:
+ SLACK_MCP_XOXP_TOKEN: xoxp-xv6Cv3jKqNW8esm5YnsftKwIzoQHUzAP
\ No newline at end of file
diff --git a/examples/call-openapi-redirect.yaml b/examples/call-openapi-redirect.yaml
index a35c6e03..2d629bd6 100644
--- a/examples/call-openapi-redirect.yaml
+++ b/examples/call-openapi-redirect.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: openapi-example
version: '0.1.0'
diff --git a/examples/call-openapi.yaml b/examples/call-openapi.yaml
index 27ba3488..dc82b3f3 100644
--- a/examples/call-openapi.yaml
+++ b/examples/call-openapi.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: openapi-example
version: '0.1.0'
diff --git a/examples/conditional-task.yaml b/examples/conditional-task.yaml
index 556fa677..4dd8ed2b 100644
--- a/examples/conditional-task.yaml
+++ b/examples/conditional-task.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: conditional-task
version: '0.1.0'
diff --git a/examples/do-multiple.yaml b/examples/do-multiple.yaml
index dc78fc7b..e5421c95 100644
--- a/examples/do-multiple.yaml
+++ b/examples/do-multiple.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: call-http-shorthand-endpoint
version: '0.1.0'
diff --git a/examples/do-single.yaml b/examples/do-single.yaml
index 33c769d7..43a7b33a 100644
--- a/examples/do-single.yaml
+++ b/examples/do-single.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: call-http-shorthand-endpoint
version: '0.1.0'
diff --git a/examples/emit.yaml b/examples/emit.yaml
index c90be7b2..ece072a9 100644
--- a/examples/emit.yaml
+++ b/examples/emit.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: emit
version: '0.1.0'
diff --git a/examples/for.yaml b/examples/for.yaml
index 0e07adac..4959c790 100644
--- a/examples/for.yaml
+++ b/examples/for.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: for-example
version: '0.1.0'
diff --git a/examples/fork.yaml b/examples/fork.yaml
index 7ecb2451..aa410081 100644
--- a/examples/fork.yaml
+++ b/examples/fork.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: fork-example
version: '0.1.0'
diff --git a/examples/listen-to-all read-envelope.yaml b/examples/listen-to-all read-envelope.yaml
index a973404d..413c38da 100644
--- a/examples/listen-to-all read-envelope.yaml
+++ b/examples/listen-to-all read-envelope.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-all-read-envelope
version: '0.1.0'
diff --git a/examples/listen-to-all.yaml b/examples/listen-to-all.yaml
index 982e476d..bd5d1d62 100644
--- a/examples/listen-to-all.yaml
+++ b/examples/listen-to-all.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-all
version: '0.1.0'
diff --git a/examples/listen-to-any-filter.yaml b/examples/listen-to-any-filter.yaml
index f5ee19f0..650010e8 100644
--- a/examples/listen-to-any-filter.yaml
+++ b/examples/listen-to-any-filter.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-any-filter
version: '0.1.0'
diff --git a/examples/listen-to-any-forever-foreach.yaml b/examples/listen-to-any-forever-foreach.yaml
index 840cbffd..307e55bb 100644
--- a/examples/listen-to-any-forever-foreach.yaml
+++ b/examples/listen-to-any-forever-foreach.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-any-while-foreach
version: '0.1.0'
diff --git a/examples/listen-to-any-until-condition.yaml b/examples/listen-to-any-until-condition.yaml
index 4a1008ec..658d6d92 100644
--- a/examples/listen-to-any-until-condition.yaml
+++ b/examples/listen-to-any-until-condition.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-any
version: '0.1.0'
diff --git a/examples/listen-to-any-until-consumed.yaml b/examples/listen-to-any-until-consumed.yaml
index 2aece6f1..3b36769e 100644
--- a/examples/listen-to-any-until-consumed.yaml
+++ b/examples/listen-to-any-until-consumed.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-any
version: '0.1.0'
diff --git a/examples/listen-to-any.yaml b/examples/listen-to-any.yaml
index 4f56769e..a09f4f5d 100644
--- a/examples/listen-to-any.yaml
+++ b/examples/listen-to-any.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-any
version: '0.1.0'
diff --git a/examples/listen-to-one.yaml b/examples/listen-to-one.yaml
index 884252df..584f6dc4 100644
--- a/examples/listen-to-one.yaml
+++ b/examples/listen-to-one.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: listen-to-one
version: '0.1.0'
diff --git a/examples/mock-service-extension.yaml b/examples/mock-service-extension.yaml
index dfb29d68..ba27f2fe 100644
--- a/examples/mock-service-extension.yaml
+++ b/examples/mock-service-extension.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: sample-workflow
version: 0.1.0
diff --git a/examples/raise-inline.yaml b/examples/raise-inline.yaml
index 3592f211..7bfd4107 100644
--- a/examples/raise-inline.yaml
+++ b/examples/raise-inline.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: raise-not-implemented
version: '0.1.0'
diff --git a/examples/raise-reusable.yaml b/examples/raise-reusable.yaml
index 16b4b249..e199e030 100644
--- a/examples/raise-reusable.yaml
+++ b/examples/raise-reusable.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: raise-not-implemented
version: '0.1.0'
diff --git a/examples/run-container-cleanup-always.yaml b/examples/run-container-cleanup-always.yaml
index 5921ecb6..7c20df63 100644
--- a/examples/run-container-cleanup-always.yaml
+++ b/examples/run-container-cleanup-always.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container
version: '0.1.0'
diff --git a/examples/run-container-cleanup-eventually.yaml b/examples/run-container-cleanup-eventually.yaml
index 725113f2..ce27f116 100644
--- a/examples/run-container-cleanup-eventually.yaml
+++ b/examples/run-container-cleanup-eventually.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container
version: '0.1.0'
diff --git a/examples/run-container-with-name.yaml b/examples/run-container-with-name.yaml
index c10f697c..db84f151 100644
--- a/examples/run-container-with-name.yaml
+++ b/examples/run-container-with-name.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container-with-name
version: '0.1.0'
diff --git a/examples/run-container.yaml b/examples/run-container.yaml
index 3e2ac953..38382d9e 100644
--- a/examples/run-container.yaml
+++ b/examples/run-container.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container
version: '0.1.0'
diff --git a/examples/run-return-all.yaml b/examples/run-return-all.yaml
index ca9549c0..7605ac1e 100644
--- a/examples/run-return-all.yaml
+++ b/examples/run-return-all.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container
version: '0.1.0'
diff --git a/examples/run-return-code.yaml b/examples/run-return-code.yaml
index 18441604..229fb119 100644
--- a/examples/run-return-code.yaml
+++ b/examples/run-return-code.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container
version: '0.1.0'
diff --git a/examples/run-return-none.yaml b/examples/run-return-none.yaml
index 88e8d929..d6420283 100644
--- a/examples/run-return-none.yaml
+++ b/examples/run-return-none.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container
version: '0.1.0'
diff --git a/examples/run-return-stderr.yaml b/examples/run-return-stderr.yaml
index 74d46ee5..36b0e3aa 100644
--- a/examples/run-return-stderr.yaml
+++ b/examples/run-return-stderr.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-container
version: '0.1.0'
diff --git a/examples/run-script-with-arguments.yaml b/examples/run-script-with-arguments.yaml
index db5fe32b..78a25ea6 100644
--- a/examples/run-script-with-arguments.yaml
+++ b/examples/run-script-with-arguments.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: samples
name: run-script-with-arguments
version: 0.1.0
diff --git a/examples/run-subflow.yaml b/examples/run-subflow.yaml
index 17d34694..3dd45490 100644
--- a/examples/run-subflow.yaml
+++ b/examples/run-subflow.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: run-subflow
version: '0.1.0'
diff --git a/examples/schedule-cron.yaml b/examples/schedule-cron.yaml
index b0a88720..25d6ff9c 100644
--- a/examples/schedule-cron.yaml
+++ b/examples/schedule-cron.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: cron-schedule
version: '0.1.0'
diff --git a/examples/schedule-event-driven.yaml b/examples/schedule-event-driven.yaml
index 4fee65d3..482d20fa 100644
--- a/examples/schedule-event-driven.yaml
+++ b/examples/schedule-event-driven.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: event-driven-schedule
version: '0.1.0'
diff --git a/examples/set-expression.yaml b/examples/set-expression.yaml
index cb114a99..cdc0d1d2 100644
--- a/examples/set-expression.yaml
+++ b/examples/set-expression.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: set
version: '0.1.0'
diff --git a/examples/set.yaml b/examples/set.yaml
index 41208138..1f25af28 100644
--- a/examples/set.yaml
+++ b/examples/set.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: set
version: '0.1.0'
diff --git a/examples/star-wars-homeworld.yaml b/examples/star-wars-homeworld.yaml
index c4f524ba..3bc4e621 100644
--- a/examples/star-wars-homeworld.yaml
+++ b/examples/star-wars-homeworld.yaml
@@ -1,6 +1,6 @@
# yaml-language-server: $schema=../schema/workflow.yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: examples
name: star-wars-homeplanet
version: '1.0.0'
diff --git a/examples/switch-then-string.yaml b/examples/switch-then-string.yaml
index ccd307d5..892e1a33 100644
--- a/examples/switch-then-string.yaml
+++ b/examples/switch-then-string.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: sample-workflow
version: 0.1.0
diff --git a/examples/try-catch-retry-inline.yaml b/examples/try-catch-retry-inline.yaml
index 257056dc..cb29f266 100644
--- a/examples/try-catch-retry-inline.yaml
+++ b/examples/try-catch-retry-inline.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: try-catch-retry
version: '0.1.0'
diff --git a/examples/try-catch-retry-reusable.yaml b/examples/try-catch-retry-reusable.yaml
index d009e8e2..372cd730 100644
--- a/examples/try-catch-retry-reusable.yaml
+++ b/examples/try-catch-retry-reusable.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: try-catch-retry
version: '0.1.0'
diff --git a/examples/try-catch-then.yaml b/examples/try-catch-then.yaml
index 0c7cec16..f11fa1fb 100644
--- a/examples/try-catch-then.yaml
+++ b/examples/try-catch-then.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: try-catch
version: '0.1.0'
diff --git a/examples/try-catch.yaml b/examples/try-catch.yaml
index 5c9cdf9a..42378bfb 100644
--- a/examples/try-catch.yaml
+++ b/examples/try-catch.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: try-catch
version: '0.1.0'
diff --git a/examples/wait-duration-inline.yaml b/examples/wait-duration-inline.yaml
index e250fcf0..c5d340ce 100644
--- a/examples/wait-duration-inline.yaml
+++ b/examples/wait-duration-inline.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: wait-duration-inline
version: '0.1.0'
diff --git a/examples/wait-duration-iso8601.yaml b/examples/wait-duration-iso8601.yaml
index c3ca63cf..8512077f 100644
--- a/examples/wait-duration-iso8601.yaml
+++ b/examples/wait-duration-iso8601.yaml
@@ -1,5 +1,5 @@
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: test
name: wait-duration-8601
version: '0.1.0'
diff --git a/schema/workflow.yaml b/schema/workflow.yaml
index 299c33fe..e47ff664 100644
--- a/schema/workflow.yaml
+++ b/schema/workflow.yaml
@@ -1,4 +1,4 @@
-$id: https://serverlessworkflow.io/schemas/1.0.1/workflow.yaml
+$id: https://serverlessworkflow.io/schemas/1.0.2/workflow.yaml
$schema: https://json-schema.org/draft/2020-12/schema
description: Serverless Workflow DSL - Workflow Schema.
type: object
@@ -473,6 +473,108 @@ $defs:
description: The parameters object to send with the A2A method.
required: [ method ]
unevaluatedProperties: false
+ - title: CallMCP
+ description: Defines the MCP call to perform.
+ type: object
+ unevaluatedProperties: false
+ required: [ call, with ]
+ allOf:
+ - $ref: '#/$defs/taskBase'
+ - properties:
+ call:
+ type: string
+ const: mcp
+ with:
+ type: object
+ title: MCPArguments
+ description: The MCP call arguments.
+ properties:
+ protocolVersion:
+ type: string
+ default: '2025-06-18'
+ title: McpProtocolVersion
+ description: The version of the MCP protocol to use.
+ method:
+ type: string
+ enum: [ tools/list, tools/call, prompts/list, prompts/get, resources/list, resources/read, resources/templates/list ]
+ title: McpMethod
+ description: The MCP method to call.
+ parameters:
+ oneOf:
+ - type: object
+ additionalProperties: true
+ - type: string
+ title: McpMethodParameters
+ description: The MCP method parameters.
+ timeout:
+ $ref: '#/$defs/duration'
+ title: McpCallTimeout
+ description: The duration after which the MCP call times out.
+ transport:
+ type: object
+ title: McpCallTransport
+ description: The transport to use to perform the MCP call.
+ properties:
+ http:
+ type: object
+ title: McpHttpTransport
+ description: The definition of the HTTP transport to use.
+ properties:
+ endpoint:
+ $ref: '#/$defs/endpoint'
+ title: McpHttpTransportEndpoint
+ description: The MCP server endpoint to connect to.
+ headers:
+ type: object
+ additionalProperties:
+ type: string
+ title: McpHttpTransportHeaders
+ description: A key/value mapping of the HTTP headers to send with requests, if any.
+ required: [ endpoint ]
+ stdio:
+ type: object
+ title: McpStdioTransport
+ description: The definition of the STDIO transport to use.
+ properties:
+ command:
+ type: string
+ title: McpStdioTransportCommand
+ description: The command used to run the MCP server.
+ arguments:
+ type: array
+ items:
+ type: string
+ title: McpStdioTransportArguments
+ description: An optional list of arguments to pass to the command.
+ environment:
+ type: object
+ additionalProperties:
+ type: string
+ title: McpStdioTransportEnvironment
+ description: A key/value mapping, if any, of environment variables used to configure the MCP server.
+ required: [ command ]
+ options:
+ type: object
+ additionalProperties:
+ type: string
+ oneOf:
+ - required: [http]
+ - required: [stdio]
+ client:
+ type: object
+ title: McpClient
+ description: Describes the client used to perform the MCP call.
+ properties:
+ name:
+ type: string
+ title: McpClientName
+ description: The name of the client used to connect to the MCP server.
+ description:
+ type: string
+ title: McpClientVersion
+ description: The version of the client used to connect to the MCP server.
+ required: [ name, version ]
+ required: [ method, transport ]
- title: CallFunction
description: Defines the function call to perform.
type: object
@@ -484,7 +586,7 @@ $defs:
call:
type: string
not:
- enum: ["asyncapi", "grpc", "http", "openapi", "a2a"]
+ enum: ["asyncapi", "grpc", "http", "openapi", "a2a", "mcp"]
description: The name of the function to call.
with:
type: object
diff --git a/use-cases/automated-data-backup/README.md b/use-cases/automated-data-backup/README.md
index dc5ddac5..c1935e9c 100644
--- a/use-cases/automated-data-backup/README.md
+++ b/use-cases/automated-data-backup/README.md
@@ -54,7 +54,7 @@ The following diagram represents the high-level flow of the workflow:
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: sql-export-to-minio
version: 0.1.2
diff --git a/use-cases/managing-ev-charging-stations/README.md b/use-cases/managing-ev-charging-stations/README.md
index 1d36a688..f9c3552d 100644
--- a/use-cases/managing-ev-charging-stations/README.md
+++ b/use-cases/managing-ev-charging-stations/README.md
@@ -70,7 +70,7 @@ The following diagram represents the high-level flow of the workflow:
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: manage-ev-charging-stations
version: '0.1.0'
diff --git a/use-cases/managing-github-issues/README.md b/use-cases/managing-github-issues/README.md
index 8b6c43de..db333639 100644
--- a/use-cases/managing-github-issues/README.md
+++ b/use-cases/managing-github-issues/README.md
@@ -63,7 +63,7 @@ The following diagram represents the high-level flow of the workflow:
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: manage-github-issues
version: '0.1.0'
diff --git a/use-cases/multi-agent-ai-content-generation/README.md b/use-cases/multi-agent-ai-content-generation/README.md
index 12cf00f6..f79a453c 100644
--- a/use-cases/multi-agent-ai-content-generation/README.md
+++ b/use-cases/multi-agent-ai-content-generation/README.md
@@ -66,7 +66,7 @@ The following diagram represents the high-level flow of the workflow:
```yaml
document:
- dsl: '1.0.1'
+ dsl: '1.0.2'
namespace: default
name: multi-agent-collaboration-for-ai-content
version: '0.1.0'