@mastra/mcp-docs-server 1.2.15-alpha.6 → 1.2.15-alpha.9

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.
@@ -153,6 +153,25 @@ When the agent calls this tool, users see a card with the tool name, arguments,
153
153
 
154
154
  Set `toolDisplay: 'text'` on an adapter to render tool calls as plain text instead of interactive cards. In `'hidden'` mode, `autoResumeSuspendedTools` can resume suspended tools when a later user message arrives on the same thread. This requires memory. Hidden mode only suppresses the approval buttons.
155
155
 
156
+ ## Reply formatting
157
+
158
+ Agent replies post as markdown by default. Platforms with native markdown rendering, such as Slack, render bold text, links, and tables directly. Other platforms convert the markdown to their own format. Agents write standard markdown and it renders correctly everywhere, matching how the same reply renders in Studio.
159
+
160
+ Set `textFormat: 'plain'` on an adapter to post replies as literal plain text instead:
161
+
162
+ ```typescript
163
+ channels: {
164
+ adapters: {
165
+ slack: {
166
+ adapter: createSlackAdapter(),
167
+ textFormat: 'plain',
168
+ },
169
+ },
170
+ },
171
+ ```
172
+
173
+ Use this escape hatch if your agent is prompted to emit a platform-specific dialect, such as Slack mrkdwn, instead of standard markdown. If you added such prompt instructions to work around markdown rendering literally, remove them instead. The default now renders standard markdown natively. `textFormat` affects final reply text only. Tool cards, error messages, and natively streamed text are unaffected.
174
+
156
175
  ## Multi-user awareness
157
176
 
158
177
  In group conversations, Mastra prefixes each message with the sender's name and platform ID so the agent can distinguish between speakers:
@@ -69,15 +69,15 @@ The Mastra Client SDK exposes all resources served by the Mastra Server.
69
69
  - **[Logs](https://mastra.ai/reference/client-js/logs)**: View logs and debug system behavior.
70
70
  - **[Telemetry](https://mastra.ai/reference/client-js/telemetry)**: View app performance and trace activity.
71
71
 
72
- ## Create and run stored workflows
72
+ ## Create and run dynamic workflows
73
73
 
74
- Use `upsertStoredWorkflow()` to create or replace a persisted workflow definition. A successful upsert validates the complete definition, registers it with the running Mastra instance, and makes it available through the standard workflow execution API.
74
+ Use `upsertDynamicWorkflow()` to create or replace a persisted workflow definition. A successful upsert validates the complete definition, registers it with the running Mastra instance, and makes it available through the standard workflow execution API.
75
75
 
76
76
  The following example shows the full lifecycle of a mapping workflow, from creation and inspection through execution and deletion:
77
77
 
78
78
  ```typescript
79
79
  import { MastraClient } from '@mastra/client-js'
80
- import type { UpsertStoredWorkflowParams } from '@mastra/client-js'
80
+ import type { UpsertDynamicWorkflowParams } from '@mastra/client-js'
81
81
 
82
82
  const client = new MastraClient({
83
83
  baseUrl: process.env.MASTRA_API_URL || 'http://localhost:4111',
@@ -105,25 +105,25 @@ const definition = {
105
105
  }),
106
106
  },
107
107
  ],
108
- } satisfies UpsertStoredWorkflowParams
108
+ } satisfies UpsertDynamicWorkflowParams
109
109
 
110
- await client.upsertStoredWorkflow(definition)
110
+ await client.upsertDynamicWorkflow(definition)
111
111
 
112
- const storedWorkflow = client.getStoredWorkflow(definition.id)
113
- const storedDefinition = await storedWorkflow.details()
112
+ const dynamicWorkflow = client.getDynamicWorkflow(definition.id)
113
+ const dynamicDefinition = await dynamicWorkflow.details()
114
114
 
115
- const workflow = client.getWorkflow(storedDefinition.id)
115
+ const workflow = client.getWorkflow(dynamicDefinition.id)
116
116
  const run = await workflow.createRun()
117
117
  const result = await run.startAsync({ inputData: { name: 'Ada' } })
118
118
 
119
119
  console.log(result)
120
120
 
121
- await storedWorkflow.delete()
121
+ await dynamicWorkflow.delete()
122
122
  ```
123
123
 
124
- Use `listStoredWorkflows()` to list persisted definitions. Calling `upsertStoredWorkflow()` again with the same `id` replaces the stored definition and live workflow registration.
124
+ Use `listDynamicWorkflows()` to list persisted definitions. Calling `upsertDynamicWorkflow()` again with the same `id` replaces the stored definition and live workflow registration.
125
125
 
126
- > **Warning:** Durable storage requires a configured storage adapter that supports the `workflowDefinitions` domain. Without that domain, Core can register a workflow in memory, but the server's stored-workflow API can't preserve it across restarts.
126
+ > **Warning:** Durable storage requires a configured storage adapter that supports the `workflowDefinitions` domain. Without that domain, Core can register a workflow in memory, but the server's dynamic-workflow API can't preserve it across restarts.
127
127
  >
128
128
  > Stored definitions support declarative agent, tool, mapping, nested workflow, parallel, foreach, sleep, sleep-until, conditional, and loop entries. They can't contain JavaScript closures. Conditional and loop logic must use the declarative predicate format, and referenced agents, tools, and nested workflows must already be registered.
129
129
  >
@@ -123,7 +123,7 @@ export const testWorkflow = createWorkflow({})
123
123
  .commit()
124
124
  ```
125
125
 
126
- `.agent()` records a declarative entry in the workflow graph rather than an opaque step, so workflows built this way can be persisted as [stored workflows](https://mastra.ai/docs/workflows/stored-workflows). Visit [Workflow.agent()](https://mastra.ai/reference/workflows/workflow-methods/agent) for all parameters.
126
+ `.agent()` records a declarative entry in the workflow graph rather than an opaque step, so workflows built this way can be persisted as [dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows). Visit [Workflow.agent()](https://mastra.ai/reference/workflows/workflow-methods/agent) for all parameters.
127
127
 
128
128
  ## Using tools in workflows
129
129
 
@@ -184,7 +184,7 @@ import { testTool } from '../tools/test-tool'
184
184
  export const testWorkflow = createWorkflow({}).then(step1).tool(testTool).commit()
185
185
  ```
186
186
 
187
- Like `.agent()`, `.tool()` records a declarative entry, so the workflow can be persisted as a [stored workflow](https://mastra.ai/docs/workflows/stored-workflows). Visit [Workflow.tool()](https://mastra.ai/reference/workflows/workflow-methods/tool) for all parameters.
187
+ Like `.agent()`, `.tool()` records a declarative entry, so the workflow can be persisted as a [dynamic workflow](https://mastra.ai/docs/workflows/dynamic-workflows). Visit [Workflow.tool()](https://mastra.ai/reference/workflows/workflow-methods/tool) for all parameters.
188
188
 
189
189
  ## Related
190
190
 
@@ -1,22 +1,22 @@
1
1
  > Discover all available pages from the documentation index: https://mastra.ai/llms.txt
2
2
 
3
- # Stored workflows
3
+ # Dynamic workflows
4
4
 
5
5
  > **Beta:** This feature is in beta. Breaking changes may occur without a major version bump until the API is stable.
6
6
 
7
- Stored workflows are workflow definitions expressed as data instead of code. A definition is a JSON document that describes the workflow's schemas and step graph. Mastra validates the definition and registers it as a runnable workflow, then persists it in storage so it survives process restarts.
7
+ Dynamic workflows are workflow definitions expressed as data instead of code. A definition is a JSON document that describes the workflow's schemas and step graph. Mastra validates the definition and registers it as a runnable workflow, then persists it in storage so it survives process restarts.
8
8
 
9
- Because a definition contains no JavaScript closures, anything that can produce JSON can author a workflow: an HTTP client, an LLM, a visual editor, or your own tooling. Once registered, a stored workflow runs through the same execution API as a code-defined workflow.
9
+ Because a definition contains no JavaScript closures, anything that can produce JSON can author a workflow: an HTTP client, an LLM, a visual editor, or your own tooling. Once registered, a dynamic workflow runs through the same execution API as a code-defined workflow.
10
10
 
11
- ## When to use stored workflows
11
+ ## When to use dynamic workflows
12
12
 
13
- Use stored workflows when users, agents, visual editors, or external systems need to create workflows without changing application code or deploying again.
13
+ Use dynamic workflows when users, agents, visual editors, or external systems need to create workflows without changing application code or deploying again.
14
14
 
15
- Keep defining workflows with [`createWorkflow()`](https://mastra.ai/docs/workflows/overview) when the workflow belongs in your application source or needs custom step functions. Stored workflows can invoke agents, tools, and workflows that are already registered on the `Mastra` instance.
15
+ Keep defining workflows with [`createWorkflow()`](https://mastra.ai/docs/workflows/overview) when the workflow belongs in your application source or needs custom step functions. Dynamic workflows can invoke agents, tools, and workflows that are already registered on the `Mastra` instance.
16
16
 
17
17
  ## Quickstart
18
18
 
19
- The following example registers a tool and invokes it from a stored workflow. It then runs the workflow. `LibSQLStore` persists the definition in `mastra.db`, so Mastra can restore it after a restart.
19
+ The following example registers a tool and invokes it from a dynamic workflow. It then runs the workflow. `LibSQLStore` persists the definition in `mastra.db`, so Mastra can restore it after a restart.
20
20
 
21
21
  ```typescript
22
22
  import { Mastra } from '@mastra/core/mastra'
@@ -46,7 +46,7 @@ const mastra = new Mastra({
46
46
  tools: { 'create-greeting': greetingTool },
47
47
  })
48
48
 
49
- await mastra.addStoredWorkflow({
49
+ await mastra.addDynamicWorkflow({
50
50
  id: 'greeting-workflow',
51
51
  description: 'Create a greeting for the supplied name',
52
52
  inputSchema: {
@@ -83,9 +83,9 @@ if (result.status === 'success') {
83
83
  }
84
84
  ```
85
85
 
86
- The workflow prints `Hello, Ada!`. Calling [`addStoredWorkflow()`](https://mastra.ai/reference/core/addStoredWorkflow) validates the definition before it changes storage or the live workflow registry.
86
+ The workflow prints `Hello, Ada!`. Calling [`addDynamicWorkflow()`](https://mastra.ai/reference/core/addDynamicWorkflow) validates the definition before it changes storage or the live workflow registry.
87
87
 
88
- The definition uses JSON Schema because it must survive a JSON round trip. The `graph` describes which registered components to invoke and how data moves between them. See the [stored workflow definition reference](https://mastra.ai/reference/workflows/stored-workflow-definition) for every field and graph entry.
88
+ The definition uses JSON Schema because it must survive a JSON round trip. The `graph` describes which registered components to invoke and how data moves between them. See the [dynamic workflow definition reference](https://mastra.ai/reference/workflows/dynamic-workflow-definition) for every field and graph entry.
89
89
 
90
90
  ## Build and update definitions
91
91
 
@@ -93,54 +93,54 @@ A definition can come from any source that produces JSON. For example, an API ro
93
93
 
94
94
  ```typescript
95
95
  const definition = await request.json()
96
- await mastra.addStoredWorkflow(definition)
96
+ await mastra.addDynamicWorkflow(definition)
97
97
  ```
98
98
 
99
99
  ### Register dependencies first
100
100
 
101
- Register referenced components on the same `Mastra` instance before adding the stored workflow. Agent and nested workflow entries use their intrinsic IDs. A tool entry uses its key from the `Mastra` `tools` object, so the quickstart registers the tool under `create-greeting` before referencing that key with `toolId`.
101
+ Register referenced components on the same `Mastra` instance before adding the dynamic workflow. Agent and nested workflow entries use their intrinsic IDs. A tool entry uses its key from the `Mastra` `tools` object, so the quickstart registers the tool under `create-greeting` before referencing that key with `toolId`.
102
102
 
103
- Use a `mapping` entry when one step's output doesn't match the next step's input. Mapping entries can read data from the workflow input and previous step results, along with workflow state and request context. The [definition reference](https://mastra.ai/reference/workflows/stored-workflow-definition) lists the supported mapping descriptors.
103
+ Use a `mapping` entry when one step's output doesn't match the next step's input. Mapping entries can read data from the workflow input and previous step results, along with workflow state and request context. The [definition reference](https://mastra.ai/reference/workflows/dynamic-workflow-definition) lists the supported mapping descriptors.
104
104
 
105
105
  ### Replace a workflow
106
106
 
107
107
  Add a new definition with the same `id` to replace the persisted definition and live registration:
108
108
 
109
109
  ```typescript
110
- await mastra.addStoredWorkflow(updatedDefinition)
110
+ await mastra.addDynamicWorkflow(updatedDefinition)
111
111
  ```
112
112
 
113
113
  New runs use the updated graph. Runs that already started continue with their original graph.
114
114
 
115
115
  ### Add nested workflows together
116
116
 
117
- When a root workflow references helper workflows that aren't registered yet, add the full set with [`addStoredWorkflows()`](https://mastra.ai/reference/core/addStoredWorkflows):
117
+ When a root workflow references helper workflows that aren't registered yet, add the full set with [`addDynamicWorkflows()`](https://mastra.ai/reference/core/addDynamicWorkflows):
118
118
 
119
119
  ```typescript
120
- await mastra.addStoredWorkflows([rootDefinition, helperDefinition])
120
+ await mastra.addDynamicWorkflows([rootDefinition, helperDefinition])
121
121
  ```
122
122
 
123
123
  Mastra validates the bundle as a unit and determines the registration order from the dependencies. If validation fails, none of the definitions are registered.
124
124
 
125
125
  ### Manage definitions over HTTP
126
126
 
127
- Applications don't need direct access to the `Mastra` instance to manage stored workflows. Use one of these interfaces:
127
+ Applications don't need direct access to the `Mastra` instance to manage dynamic workflows. Use one of these interfaces:
128
128
 
129
- - [Client SDK workflows API](https://mastra.ai/reference/client-js/workflows): Call `upsertStoredWorkflow()` from a JavaScript or TypeScript client.
129
+ - [Client SDK workflows API](https://mastra.ai/reference/client-js/workflows): Call `upsertDynamicWorkflow()` from a JavaScript or TypeScript client.
130
130
  - [Server routes](https://mastra.ai/reference/server/routes): Send definitions to `POST /api/stored/workflows`.
131
131
 
132
- On authenticated servers, stored-workflow management requires the `stored-workflows:read` and `stored-workflows:write` permissions. Running the registered workflow requires `workflows:execute`.
132
+ On authenticated servers, dynamic-workflow management requires the `stored-workflows:read` and `stored-workflows:write` permissions. Running the registered workflow requires `workflows:execute`.
133
133
 
134
134
  ### Persist definitions
135
135
 
136
136
  Stored definitions use the `workflowDefinitions` storage domain. On startup, Mastra loads active definitions from storage and registers them in dependency order.
137
137
 
138
- Without a storage adapter that supports this domain, `addStoredWorkflow()` still registers the workflow in memory, but the definition is lost when the process restarts. See the [storage reference](https://mastra.ai/reference/storage/overview) for adapter support.
138
+ Without a storage adapter that supports this domain, `addDynamicWorkflow()` still registers the workflow in memory, but the definition is lost when the process restarts. See the [storage reference](https://mastra.ai/reference/storage/overview) for adapter support.
139
139
 
140
140
  ## Related
141
141
 
142
- - [Stored workflow definition](https://mastra.ai/reference/workflows/stored-workflow-definition)
143
- - [`Mastra.addStoredWorkflow()`](https://mastra.ai/reference/core/addStoredWorkflow)
144
- - [`Mastra.addStoredWorkflows()`](https://mastra.ai/reference/core/addStoredWorkflows)
142
+ - [Dynamic workflow definition](https://mastra.ai/reference/workflows/dynamic-workflow-definition)
143
+ - [`Mastra.addDynamicWorkflow()`](https://mastra.ai/reference/core/addDynamicWorkflow)
144
+ - [`Mastra.addDynamicWorkflows()`](https://mastra.ai/reference/core/addDynamicWorkflows)
145
145
  - [Client SDK workflows API](https://mastra.ai/reference/client-js/workflows)
146
146
  - [Server routes](https://mastra.ai/reference/server/routes)
@@ -378,12 +378,38 @@ Tracing is on by default. Pass `observability: false` to `createLiveKitWorker` t
378
378
 
379
379
  ## Deployment
380
380
 
381
- The worker is a separate process from your Mastra server. Deploy it as a long-running Node service with the production command:
381
+ The worker is a separate process from your Mastra server, so `mastra build` needs to emit it as its own entry. Add it to [`bundler.entries`](https://mastra.ai/reference/configuration):
382
+
383
+ ```typescript
384
+ import { Mastra } from '@mastra/core'
385
+
386
+ export const mastra = new Mastra({
387
+ bundler: {
388
+ entries: { 'voice-worker': './voice-worker.ts' },
389
+ // Keep LiveKit's native modules out of the bundle. `mastra build` only applies
390
+ // this default when you set no other bundler options, so set it explicitly here.
391
+ externals: true,
392
+ },
393
+ })
394
+ ```
395
+
396
+ `mastra build` now writes both processes into `.mastra/output`, sharing one `package.json` and one dependency install:
397
+
398
+ ```text
399
+ .mastra/output/
400
+ index.mjs # Mastra server
401
+ voice-worker.mjs # LiveKit worker
402
+ ```
403
+
404
+ Deploy that directory as a single artifact and start each process with its own command:
382
405
 
383
406
  ```bash
384
- node dist/voice-worker.js start
407
+ node .mastra/output/index.mjs # server
408
+ node .mastra/output/voice-worker.mjs start # worker
385
409
  ```
386
410
 
411
+ The worker needs the same environment variables as the server, plus `LIVEKIT_URL`, `LIVEKIT_API_KEY`, and `LIVEKIT_API_SECRET`.
412
+
387
413
  LiveKit's guidance on sizing, graceful shutdown, and hosting applies unchanged. See [Deploying agents](https://docs.livekit.io/agents/ops/deployment/). Workers connect outbound to LiveKit, so they don't need inbound ports.
388
414
 
389
415
  ## How it works
@@ -102,6 +102,8 @@ const agent = new Agent({
102
102
 
103
103
  **streaming** (`boolean | { updateIntervalMs?: number }`): Stream agent text deltas to the channel as the agent generates them instead of buffering and posting once per step. Requires the underlying adapter to support post-and-edit streaming. Slack defaults to true; other adapters default to false. (Default: `false (true for Slack)`)
104
104
 
105
+ **textFormat** (`'markdown' | 'plain'`): Dialect for the agent's final reply text. 'markdown' (the default) posts replies as markdown: adapters with native markdown rendering (Slack) render it directly, others convert it to their platform format. 'plain' posts replies as literal plain text, restoring the pre-markdown behavior for agents prompted to emit a platform dialect such as Slack mrkdwn. Applies to final reply text only; tool cards, error messages, and tripwire notices are unaffected. Native streaming is always markdown regardless of this setting. (Default: `'markdown'`)
106
+
105
107
  **toolDisplay** (`'cards' | 'text' | 'timeline' | 'grouped' | 'hidden' | ToolDisplayFn`): How tool calls are rendered in the channel. "cards" posts per-tool running/result cards as rich Block Kit. "text" posts the same lifecycle as plain text (no Block Kit). "timeline" and "grouped" stream tool state as inline task\_update chunks (requires streaming: true; Slack only today — other adapters may render a placeholder). "hidden" executes tools silently. Pass a function to render tool events yourself; return { kind: "post", message } for a discrete post/edit, { kind: "stream", chunk } to push into the streaming widget, or undefined to skip rendering that event. Add openIfEmpty: false to a stream result when its chunk should only apply to an active streaming session. Approve/deny prompts always render as a separate card regardless of mode. (Default: `'cards' ('grouped' for Slack)`)
106
108
 
107
109
  **typingStatus** (`boolean | ((chunk: AgentChunkType, ctx: TypingStatusContext) => string | false | null | undefined | void)`): Control the platform typing indicator. true uses built-in defaults (is typing… on text, is calling {tool}… on tool-call, is waiting for approval… on tool-call-approval). false suppresses typing entirely — useful when a live streaming widget (e.g. toolDisplay: "grouped" in Slack) already conveys progress. Pass a function to set custom status copy per chunk; return a string to set the status, or false/null/undefined to leave it unchanged. Compose with defaultTypingStatus (exported from @mastra/core/channels) to fall back to defaults for chunks you don't handle. (Default: `true`)
@@ -53,6 +53,8 @@ await slack.configure({
53
53
 
54
54
  **streaming** (`StreamingConfig | false`): Stream agent text deltas to Slack as they're generated. Pass { updateIntervalMs } to customize the post-and-edit interval, or false to buffer text until step-finish. Disabling streaming restricts toolDisplay to static modes. (Default: `true`)
55
55
 
56
+ **textFormat** (`'markdown' | 'plain'`): Dialect for the agent's final reply text, forwarded to the Slack adapter. 'markdown' (the default) posts replies as markdown so Slack renders bold text, links, and tables natively. 'plain' posts literal plain text, the escape hatch for agents prompted to emit Slack mrkdwn. Applies to buffered replies (streaming: false) and the streaming fallback; native streaming is always markdown. (Default: `'markdown'`)
57
+
56
58
  **toolDisplay** (`ToolDisplay`): How tool calls are rendered in Slack: 'cards', 'text', 'timeline', 'grouped', 'hidden', or a function. 'hidden' suppresses tool call/result rendering entirely. 'timeline' and 'grouped' require streaming. With streaming: false, only static modes are available and the default is 'cards'. (Default: `'grouped'`)
57
59
 
58
60
  **typingStatus** (`boolean | TypingStatusFn`): Show a typing indicator while the agent works. Set false to disable, or pass a function to return custom status text per stream chunk (return undefined to fall back to the default for that chunk). (Default: `true`)
@@ -225,28 +225,28 @@ A workflow run result yields the following:
225
225
 
226
226
  **payload** (`object`): Contains currentStep (id, status, output, payload) and workflowState (status, steps record)
227
227
 
228
- ## Stored workflows
228
+ ## Dynamic workflows
229
229
 
230
- > **Beta:** Stored workflows are in beta. Breaking changes may occur without a major version bump until the API is stable.
230
+ > **Beta:** Dynamic workflows are in beta. Breaking changes may occur without a major version bump until the API is stable.
231
231
 
232
- Stored workflows are workflow definitions expressed as JSON. The server persists each definition and registers it as a runnable workflow. See [Stored workflows](https://mastra.ai/docs/workflows/stored-workflows) for the definition format.
232
+ Dynamic workflows are workflow definitions expressed as JSON. The server persists each definition and registers it as a runnable workflow. See [Dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows) for the definition format.
233
233
 
234
- ### `listStoredWorkflows()`
234
+ ### `listDynamicWorkflows()`
235
235
 
236
- List stored workflow definitions, optionally filtered by `status` (`'active' | 'archived'`) and `authorId`:
236
+ List dynamic workflow definitions, optionally filtered by `status` (`'active' | 'archived'`) and `authorId`:
237
237
 
238
238
  ```typescript
239
- const { definitions, total } = await mastraClient.listStoredWorkflows({
239
+ const { definitions, total } = await mastraClient.listDynamicWorkflows({
240
240
  status: 'active',
241
241
  })
242
242
  ```
243
243
 
244
- ### `upsertStoredWorkflow()`
244
+ ### `upsertDynamicWorkflow()`
245
245
 
246
- Create or replace a stored workflow definition. The server validates the definition, persists it, and live-registers it for execution:
246
+ Create or replace a dynamic workflow definition. The server validates the definition, persists it, and live-registers it for execution:
247
247
 
248
248
  ```typescript
249
- const stored = await mastraClient.upsertStoredWorkflow({
249
+ const stored = await mastraClient.upsertDynamicWorkflow({
250
250
  id: 'greeting-workflow',
251
251
  description: 'Returns a greeting for the supplied name',
252
252
  inputSchema: {
@@ -274,7 +274,7 @@ const stored = await mastraClient.upsertStoredWorkflow({
274
274
  When the root definition nests helper workflows that don't exist yet, pass them in the same request through `dependencies`. The server validates and registers the bundle as a unit and echoes the helper ids back as `dependencyIds`:
275
275
 
276
276
  ```typescript
277
- const stored = await mastraClient.upsertStoredWorkflow({
277
+ const stored = await mastraClient.upsertDynamicWorkflow({
278
278
  id: 'root-workflow',
279
279
  // ...schemas and graph referencing 'helper-workflow'...
280
280
  dependencies: [helperDefinition],
@@ -283,33 +283,33 @@ const stored = await mastraClient.upsertStoredWorkflow({
283
283
  console.log(stored.dependencyIds) // ['helper-workflow']
284
284
  ```
285
285
 
286
- ### `getStoredWorkflow()`
286
+ ### `getDynamicWorkflow()`
287
287
 
288
- Get a stored workflow instance for definition management. To execute a stored workflow, use `getWorkflow(id).createRun()` like any other workflow:
288
+ Get a dynamic workflow instance for definition management. To execute a dynamic workflow, use `getWorkflow(id).createRun()` like any other workflow:
289
289
 
290
290
  ```typescript
291
- const storedWorkflow = mastraClient.getStoredWorkflow('greeting-workflow')
291
+ const dynamicWorkflow = mastraClient.getDynamicWorkflow('greeting-workflow')
292
292
  ```
293
293
 
294
- ### `storedWorkflow.details()`
294
+ ### `dynamicWorkflow.details()`
295
295
 
296
296
  Retrieve the persisted definition, including schemas, graph, status, and timestamps:
297
297
 
298
298
  ```typescript
299
- const definition = await storedWorkflow.details()
299
+ const definition = await dynamicWorkflow.details()
300
300
  ```
301
301
 
302
- ### `storedWorkflow.delete()`
302
+ ### `dynamicWorkflow.delete()`
303
303
 
304
304
  Delete the stored definition and unregister the live workflow:
305
305
 
306
306
  ```typescript
307
- await storedWorkflow.delete()
307
+ await dynamicWorkflow.delete()
308
308
  ```
309
309
 
310
- ### Executing a stored workflow
310
+ ### Executing a dynamic workflow
311
311
 
312
- Once registered, a stored workflow runs through the ordinary workflow API:
312
+ Once registered, a dynamic workflow runs through the ordinary workflow API:
313
313
 
314
314
  ```typescript
315
315
  const workflow = mastraClient.getWorkflow('greeting-workflow')
@@ -500,6 +500,31 @@ const mastra = new Mastra({
500
500
 
501
501
  ## Bundler options
502
502
 
503
+ ### bundler.entries
504
+
505
+ **Type:** `Record<string, string>`\
506
+ **Default:** `{}`
507
+
508
+ Additional process entries to emit alongside the server bundle, as a map of output name to source path relative to your Mastra directory. Each entry becomes its own `<name>.mjs` in `.mastra/output`.
509
+
510
+ Use this for long-running processes that run beside your Mastra server rather than inside it, such as a [LiveKit voice worker](https://mastra.ai/guides/voice/realtime-voice). The entry shares the output directory, `package.json`, and installed dependencies with the server, so one `mastra build` produces one deployable artifact you can start with different commands.
511
+
512
+ ```typescript
513
+ import { Mastra } from '@mastra/core'
514
+
515
+ export const mastra = new Mastra({
516
+ bundler: {
517
+ entries: { 'voice-worker': './voice-worker.ts' },
518
+ },
519
+ })
520
+ ```
521
+
522
+ This emits `.mastra/output/voice-worker.mjs` next to `.mastra/output/index.mjs`. Dependencies imported only by the extra entry are analyzed too, so they're installed into the output.
523
+
524
+ Entry names can contain `/` to nest the output. They can't be `index`, which is the server bundle, `tools`, which is the tool aggregator, or start with `tools/`, which is reserved for tool bundles.
525
+
526
+ > **Note:** `mastra build` applies the [`bundler.externals`](#bundlerexternals) default of `true` only when you set no bundler options at all. Once you set `entries`, set `externals` explicitly as well if your extra entry depends on packages that can't be bundled, such as native modules.
527
+
503
528
  ### bundler.externals
504
529
 
505
530
  **Type:** `boolean | string[]`\
@@ -1,17 +1,17 @@
1
1
  > Discover all available pages from the documentation index: https://mastra.ai/llms.txt
2
2
 
3
- # Mastra.addStoredWorkflow()
3
+ # Mastra.addDynamicWorkflow()
4
4
 
5
- > **Beta:** Stored workflows are in beta. Breaking changes may occur without a major version bump until the API is stable.
5
+ > **Beta:** Dynamic workflows are in beta. Breaking changes may occur without a major version bump until the API is stable.
6
6
 
7
- The `.addStoredWorkflow()` method validates a stored workflow definition and registers it as a live workflow on the instance, persisting it through the `workflowDefinitions` storage domain. Once registered, the workflow runs like any other workflow via [`getWorkflow()`](https://mastra.ai/reference/core/getWorkflow).
7
+ The `.addDynamicWorkflow()` method validates a dynamic workflow definition and registers it as a live workflow on the instance, persisting it through the `workflowDefinitions` storage domain. Once registered, the workflow runs like any other workflow via [`getWorkflow()`](https://mastra.ai/reference/core/getWorkflow).
8
8
 
9
- See [Stored workflows](https://mastra.ai/docs/workflows/stored-workflows) for a complete setup example and the [stored workflow definition reference](https://mastra.ai/reference/workflows/stored-workflow-definition) for the accepted fields and graph entries.
9
+ See [Dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows) for a complete setup example and the [dynamic workflow definition reference](https://mastra.ai/reference/workflows/dynamic-workflow-definition) for the accepted fields and graph entries.
10
10
 
11
11
  ## Usage example
12
12
 
13
13
  ```typescript
14
- await mastra.addStoredWorkflow({
14
+ await mastra.addDynamicWorkflow({
15
15
  id: 'greeting-workflow',
16
16
  description: 'Returns a greeting for the supplied name',
17
17
  inputSchema: {
@@ -41,7 +41,7 @@ const result = await run.start({ inputData: { name: 'Ada' } })
41
41
 
42
42
  ## Parameters
43
43
 
44
- **def** (`StoredWorkflowGraph`): The workflow definition: id, optional description and metadata, JSON Schema input/output schemas, optional state and request-context schemas, and the step graph.
44
+ **def** (`DynamicWorkflowGraph`): The workflow definition: id, optional description and metadata, JSON Schema input/output schemas, optional state and request-context schemas, and the step graph.
45
45
 
46
46
  ## Returns
47
47
 
@@ -52,11 +52,11 @@ A promise that resolves once the definition is validated, registered, and persis
52
52
  - The definition is fully validated (structure, references, schema flow) before anything is mutated. Agents, tools, and workflows referenced by the graph must already be registered on the instance.
53
53
  - Adding a definition with an existing ID replaces both the stored definition and the live registration. In-flight runs keep the graph they started with.
54
54
  - Without a storage adapter that supports the `workflowDefinitions` domain, the workflow is still validated and registered in memory, but the definition is lost on restart.
55
- - To add a root workflow together with helper workflows it nests, use [`addStoredWorkflows()`](https://mastra.ai/reference/core/addStoredWorkflows).
55
+ - To add a root workflow together with helper workflows it nests, use [`addDynamicWorkflows()`](https://mastra.ai/reference/core/addDynamicWorkflows).
56
56
 
57
57
  ## Related
58
58
 
59
- - [Mastra.addStoredWorkflows()](https://mastra.ai/reference/core/addStoredWorkflows): Add a dependency-ordered bundle of definitions
59
+ - [Mastra.addDynamicWorkflows()](https://mastra.ai/reference/core/addDynamicWorkflows): Add a dependency-ordered bundle of definitions
60
60
  - [Mastra.getWorkflow()](https://mastra.ai/reference/core/getWorkflow): Retrieve a registered workflow
61
- - [Stored workflows](https://mastra.ai/docs/workflows/stored-workflows): Set up and use stored workflows
62
- - [Stored workflow definition](https://mastra.ai/reference/workflows/stored-workflow-definition): Definition fields and graph entries
61
+ - [Dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows): Set up and use dynamic workflows
62
+ - [Dynamic workflow definition](https://mastra.ai/reference/workflows/dynamic-workflow-definition): Definition fields and graph entries
@@ -1,19 +1,19 @@
1
1
  > Discover all available pages from the documentation index: https://mastra.ai/llms.txt
2
2
 
3
- # Mastra.addStoredWorkflows()
3
+ # Mastra.addDynamicWorkflows()
4
4
 
5
- > **Beta:** Stored workflows are in beta. Breaking changes may occur without a major version bump until the API is stable.
5
+ > **Beta:** Dynamic workflows are in beta. Breaking changes may occur without a major version bump until the API is stable.
6
6
 
7
- The `.addStoredWorkflows()` method adds a bundle of stored workflow definitions that may reference each other. The typical case is a root workflow plus helper workflows it nests, where none of the definitions exist yet.
7
+ The `.addDynamicWorkflows()` method adds a bundle of dynamic workflow definitions that may reference each other. The typical case is a root workflow plus helper workflows it nests, where none of the definitions exist yet.
8
8
 
9
9
  The whole bundle is validated up front. Members are then registered in dependency order, so a helper is always in place before the workflow that nests it.
10
10
 
11
- [`addStoredWorkflow()`](https://mastra.ai/reference/core/addStoredWorkflow) is the single-member case.
11
+ [`addDynamicWorkflow()`](https://mastra.ai/reference/core/addDynamicWorkflow) is the single-member case.
12
12
 
13
13
  ## Usage example
14
14
 
15
15
  ```typescript
16
- await mastra.addStoredWorkflows([
16
+ await mastra.addDynamicWorkflows([
17
17
  helperDefinition, // nested by the root — order in the array doesn't matter
18
18
  rootDefinition, // graph contains { type: 'workflow', workflowId: helperDefinition.id }
19
19
  ])
@@ -21,7 +21,7 @@ await mastra.addStoredWorkflows([
21
21
 
22
22
  ## Parameters
23
23
 
24
- **defs** (`readonly StoredWorkflowGraph[]`): The workflow definitions to add. Nested-workflow references may resolve against the live registries or against other members of the same bundle.
24
+ **defs** (`readonly DynamicWorkflowGraph[]`): The workflow definitions to add. Nested-workflow references may resolve against the live registries or against other members of the same bundle.
25
25
 
26
26
  ## Returns
27
27
 
@@ -35,6 +35,6 @@ A promise that resolves once every member is validated, registered, and persiste
35
35
 
36
36
  ## Related
37
37
 
38
- - [Mastra.addStoredWorkflow()](https://mastra.ai/reference/core/addStoredWorkflow): Add a single definition
39
- - [Stored workflows](https://mastra.ai/docs/workflows/stored-workflows): Set up and use stored workflows
40
- - [Stored workflow definition](https://mastra.ai/reference/workflows/stored-workflow-definition): Definition fields and graph entries
38
+ - [Mastra.addDynamicWorkflow()](https://mastra.ai/reference/core/addDynamicWorkflow): Add a single definition
39
+ - [Dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows): Set up and use dynamic workflows
40
+ - [Dynamic workflow definition](https://mastra.ai/reference/workflows/dynamic-workflow-definition): Definition fields and graph entries
@@ -83,7 +83,32 @@ Composio tools use uppercase slug format: `GITHUB_CREATE_ISSUE`, `SLACK_SEND_MES
83
83
 
84
84
  ### Authentication
85
85
 
86
- Connections use per-author scope by default. Set `defaultScope: 'caller-supplied'` to bucket authorization by the caller identity resolved from request context.
86
+ Connections use per-author scope by default. Set `defaultScope: 'caller-supplied'` to bucket authorization by the caller identity resolved from `MASTRA_RESOURCE_ID_KEY` in request context. Ensure each authenticated request provides a stable, unique resource ID. When using `MastraAuthWorkos`, configure `mapUserToResourceId` to set this value from the authenticated user.
87
+
88
+ ### Connection management tools
89
+
90
+ Composio provides tools for starting and monitoring authorization from an agent chat. When `allowedToolkits` is set, include `composio` to make these tools available:
91
+
92
+ ```typescript
93
+ const editor = new MastraEditor({
94
+ toolProviders: {
95
+ composio: new ComposioToolProvider({
96
+ apiKey: process.env.COMPOSIO_API_KEY!,
97
+ allowedToolkits: ['composio', 'gmail'],
98
+ defaultScope: 'caller-supplied',
99
+ }),
100
+ },
101
+ })
102
+ ```
103
+
104
+ Add only the connection management tools that the agent needs:
105
+
106
+ | Tool | Behavior |
107
+ | ------------------------------- | ---------------------------------------------------------------------------- |
108
+ | `COMPOSIO_MANAGE_CONNECTIONS` | Creates an authorization link in chat through a session owned by the caller. |
109
+ | `COMPOSIO_WAIT_FOR_CONNECTIONS` | Waits for the caller to finish authorization before the agent continues. |
110
+
111
+ `COMPOSIO_WAIT_FOR_CONNECTIONS` is optional. Without it, complete authorization and return to the chat. Then ask the agent to continue. The connected account remains associated with the caller resource ID for later requests.
87
112
 
88
113
  ***
89
114
 
@@ -82,9 +82,9 @@ The Reference section provides documentation of Mastra's API, including paramete
82
82
  - [createCodingAgent()](https://mastra.ai/reference/coding-agent/create-coding-agent)
83
83
  - [Mastra Class](https://mastra.ai/reference/core/mastra-class)
84
84
  - [MastraModelGateway](https://mastra.ai/reference/core/mastra-model-gateway)
85
+ - [.addDynamicWorkflow()](https://mastra.ai/reference/core/addDynamicWorkflow)
86
+ - [.addDynamicWorkflows()](https://mastra.ai/reference/core/addDynamicWorkflows)
85
87
  - [.addGateway()](https://mastra.ai/reference/core/addGateway)
86
- - [.addStoredWorkflow()](https://mastra.ai/reference/core/addStoredWorkflow)
87
- - [.addStoredWorkflows()](https://mastra.ai/reference/core/addStoredWorkflows)
88
88
  - [.getAgent()](https://mastra.ai/reference/core/getAgent)
89
89
  - [.getAgentById()](https://mastra.ai/reference/core/getAgentById)
90
90
  - [.getDeployer()](https://mastra.ai/reference/core/getDeployer)
@@ -366,9 +366,9 @@ The Reference section provides documentation of Mastra's API, including paramete
366
366
  - [.speak()](https://mastra.ai/reference/voice/voice.speak)
367
367
  - [.updateConfig()](https://mastra.ai/reference/voice/voice.updateConfig)
368
368
  - [Overview](https://mastra.ai/reference/workers/overview)
369
+ - [Dynamic Workflow Definition](https://mastra.ai/reference/workflows/dynamic-workflow-definition)
369
370
  - [Run Class](https://mastra.ai/reference/workflows/run)
370
371
  - [Step Class](https://mastra.ai/reference/workflows/step)
371
- - [Stored Workflow Definition](https://mastra.ai/reference/workflows/stored-workflow-definition)
372
372
  - [Workflow Class](https://mastra.ai/reference/workflows/workflow)
373
373
  - [Workflow State Reader](https://mastra.ai/reference/workflows/workflow-state-reader)
374
374
  - [.agent()](https://mastra.ai/reference/workflows/workflow-methods/agent)
@@ -197,18 +197,18 @@ The `/api/workflows/run-counts` endpoint returns counts of `running` and [`suspe
197
197
  }
198
198
  ```
199
199
 
200
- ### Stored workflows
200
+ ### Dynamic workflows
201
201
 
202
- Stored workflow definitions (beta) are workflows expressed as JSON, persisted through the `workflowDefinitions` storage domain, and live-registered on the running instance. See [Stored workflows](https://mastra.ai/docs/workflows/stored-workflows).
202
+ Dynamic workflow definitions (beta) are workflows expressed as JSON, persisted through the `workflowDefinitions` storage domain, and live-registered on the running instance. See [Dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows).
203
203
 
204
- | Method | Path | Description |
205
- | -------- | ----------------------------------------- | ------------------------------------------------------------------------------ |
206
- | `GET` | `/api/stored/workflows` | List stored workflow definitions, filterable by `status` and `authorId` |
207
- | `GET` | `/api/stored/workflows/:storedWorkflowId` | Get a stored workflow definition by ID |
208
- | `POST` | `/api/stored/workflows` | Upsert a definition (plus optional helper `dependencies`) and live-register it |
209
- | `DELETE` | `/api/stored/workflows/:storedWorkflowId` | Delete a stored definition and unregister the live workflow |
204
+ | Method | Path | Description |
205
+ | -------- | ------------------------------------------ | ------------------------------------------------------------------------------ |
206
+ | `GET` | `/api/stored/workflows` | List dynamic workflow definitions, filterable by `status` and `authorId` |
207
+ | `GET` | `/api/stored/workflows/:dynamicWorkflowId` | Get a dynamic workflow definition by ID |
208
+ | `POST` | `/api/stored/workflows` | Upsert a definition (plus optional helper `dependencies`) and live-register it |
209
+ | `DELETE` | `/api/stored/workflows/:dynamicWorkflowId` | Delete a dynamic workflow definition and unregister the live workflow |
210
210
 
211
- On authenticated servers, the read routes require the `stored-workflows:read` permission and the write routes require `stored-workflows:write`. Registered stored workflows are executed through the ordinary `/api/workflows/:workflowId` routes above.
211
+ On authenticated servers, the read routes require the `stored-workflows:read` permission and the write routes require `stored-workflows:write`. Registered dynamic workflows are executed through the ordinary `/api/workflows/:workflowId` routes above.
212
212
 
213
213
  ### Create run request body
214
214
 
@@ -10,15 +10,15 @@ Mastra storage is organized into domains. Each domain owns a set of tables or co
10
10
 
11
11
  Not every storage adapter implements every domain. Composite storage lets you mix adapters per domain when the adapter packages export the corresponding domain classes.
12
12
 
13
- | Domain | Description |
14
- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
15
- | `memory` | Conversation persistence: messages, threads, and resources (including working memory). |
16
- | `workflows` | Workflow run snapshots used for suspend and resume. |
17
- | `workflowDefinitions` | Persisted [stored workflow](https://mastra.ai/docs/workflows/stored-workflows) definitions (beta). Loaded and live-registered on boot. |
18
- | `scores` | Evaluation score records from eval runs. |
19
- | `observability` | Traces and spans used by observability exporters and Studio. |
20
- | `datasets` | Dataset records, versioned items, and dataset versions used by experiments. |
21
- | `experiments` | Experiment runs and per-item experiment results. |
13
+ | Domain | Description |
14
+ | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
15
+ | `memory` | Conversation persistence: messages, threads, and resources (including working memory). |
16
+ | `workflows` | Workflow run snapshots used for suspend and resume. |
17
+ | `workflowDefinitions` | Persisted [dynamic workflow](https://mastra.ai/docs/workflows/dynamic-workflows) definitions (beta). Loaded and live-registered on boot. |
18
+ | `scores` | Evaluation score records from eval runs. |
19
+ | `observability` | Traces and spans used by observability exporters and Studio. |
20
+ | `datasets` | Dataset records, versioned items, and dataset versions used by experiments. |
21
+ | `experiments` | Experiment runs and per-item experiment results. |
22
22
 
23
23
  The schema definitions below cover the built-in database-backed tables documented for `memory`, `workflows`, `scores`, and `observability`. Other domains, and non-database adapters, use implementation-specific storage structures.
24
24
 
@@ -92,7 +92,7 @@ Each domain declares which of its tables can be age-pruned and which timestamp c
92
92
  > - Experiments prune as whole units: an aged experiment's result rows are deleted together with it (results cascade with their parent), so a run is never left partially deleted. Retention doesn't have a separate `results` key.
93
93
  > - For `schedules`, the growth table is the fire history (`schedule_triggers`, one row per fire): schedule definitions are config and aren't pruned.
94
94
  > - On PostgreSQL, timestamp anchors use the timezone-aware mirror columns (for example `createdAtZ`, `completedAtZ`).
95
- > - LibSQL supports all domains above; PostgreSQL and MongoDB support all except `threadState` and `harness`, which they don't implement.
95
+ > - LibSQL and PostgreSQL support all domains above except `harness`, which PostgreSQL doesn't implement. MongoDB supports all except `threadState` and `harness`.
96
96
  > - The v-next PostgreSQL observability domain stores signal events in day-partitioned tables (`spans`, `metrics`, `logs`, `scores`, `feedback`). For it, `prune()` drops whole day partitions (or TimescaleDB chunks) that are entirely older than the cutoff instead of deleting rows: effective level of detail is one day, and a partition is only dropped once its entire day is past `maxAge`. `PruneResult.deleted` reports the number of rows in the dropped partitions.
97
97
 
98
98
  ## Methods
@@ -1,12 +1,12 @@
1
1
  > Discover all available pages from the documentation index: https://mastra.ai/llms.txt
2
2
 
3
- # Stored workflow definition
3
+ # Dynamic workflow definition
4
4
 
5
- > **Beta:** Stored workflows are in beta. Breaking changes may occur without a major version bump until the API is stable.
5
+ > **Beta:** Dynamic workflows are in beta. Breaking changes may occur without a major version bump until the API is stable.
6
6
 
7
- A stored workflow definition is a JSON-compatible `StoredWorkflowGraph` accepted by [`Mastra.addStoredWorkflow()`](https://mastra.ai/reference/core/addStoredWorkflow), the stored-workflow server routes, and the Client SDK workflows API.
7
+ A dynamic workflow definition is a JSON-compatible `DynamicWorkflowGraph` accepted by [`Mastra.addDynamicWorkflow()`](https://mastra.ai/reference/core/addDynamicWorkflow), the stored-workflow server routes, and the Client SDK workflows API.
8
8
 
9
- See [Stored workflows](https://mastra.ai/docs/workflows/stored-workflows) for a complete setup and usage example.
9
+ See [Dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows) for a complete setup and usage example.
10
10
 
11
11
  ## Definition fields
12
12
 
@@ -286,7 +286,7 @@ Validation errors include a dotted path, such as `graph.2.steps.0`, that identif
286
286
 
287
287
  ## Related
288
288
 
289
- - [Use stored workflows](https://mastra.ai/docs/workflows/stored-workflows)
290
- - [`Mastra.addStoredWorkflow()`](https://mastra.ai/reference/core/addStoredWorkflow)
291
- - [`Mastra.addStoredWorkflows()`](https://mastra.ai/reference/core/addStoredWorkflows)
289
+ - [Use dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows)
290
+ - [`Mastra.addDynamicWorkflow()`](https://mastra.ai/reference/core/addDynamicWorkflow)
291
+ - [`Mastra.addDynamicWorkflows()`](https://mastra.ai/reference/core/addDynamicWorkflows)
292
292
  - [Client SDK workflows API](https://mastra.ai/reference/client-js/workflows)
@@ -4,7 +4,7 @@
4
4
 
5
5
  The `.agent()` method adds an agent as a declarative step. The step accepts `{ prompt: string }` as input and returns `{ text: string }` by default. Use `.map()` before the agent to build the prompt from workflow data.
6
6
 
7
- Unlike wrapping an agent with `createStep()`, `.agent()` records a declarative entry in the workflow graph. This makes the workflow portable: the same graph can be serialized and persisted as a [stored workflow](https://mastra.ai/docs/workflows/stored-workflows).
7
+ Unlike wrapping an agent with `createStep()`, `.agent()` records a declarative entry in the workflow graph. This makes the workflow portable: the same graph can be serialized and persisted as a [dynamic workflow](https://mastra.ai/docs/workflows/dynamic-workflows).
8
8
 
9
9
  ## Usage example
10
10
 
@@ -53,10 +53,10 @@ workflow.agent("test-agent", { maxSteps: 3 }).commit();
53
53
 
54
54
  ## Persisting agent steps
55
55
 
56
- Workflows built with `.agent()` serialize to the same declarative entries that [stored workflows](https://mastra.ai/docs/workflows/stored-workflows) use. Only `retries` and `metadata` round-trip through storage. Options that hold functions, such as `onFinish` or a function-valued `toolChoice`, throw an error when the workflow is stored.
56
+ Workflows built with `.agent()` serialize to the same declarative entries that [dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows) use. Only `retries` and `metadata` round-trip through storage. Options that hold functions, such as `onFinish` or a function-valued `toolChoice`, throw an error when the workflow is stored.
57
57
 
58
58
  ## Related
59
59
 
60
60
  - [Agents and Tools](https://mastra.ai/docs/workflows/agents-and-tools)
61
- - [Stored workflows](https://mastra.ai/docs/workflows/stored-workflows)
61
+ - [Dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows)
62
62
  - [Workflow.tool()](https://mastra.ai/reference/workflows/workflow-methods/tool)
@@ -4,7 +4,7 @@
4
4
 
5
5
  The `.tool()` method adds a tool as a declarative step. The tool's own input and output schemas apply, so the previous step's output must satisfy the tool's input schema. Use `.map()` to transform the data if they don't match.
6
6
 
7
- Unlike wrapping a tool with `createStep()`, `.tool()` records a declarative entry in the workflow graph. This makes the workflow portable: the same graph can be serialized and persisted as a [stored workflow](https://mastra.ai/docs/workflows/stored-workflows).
7
+ Unlike wrapping a tool with `createStep()`, `.tool()` records a declarative entry in the workflow graph. This makes the workflow portable: the same graph can be serialized and persisted as a [dynamic workflow](https://mastra.ai/docs/workflows/dynamic-workflows).
8
8
 
9
9
  ## Usage example
10
10
 
@@ -34,10 +34,10 @@ workflow.tool("lookup-customer", { retries: 2 }).commit();
34
34
 
35
35
  ## Persisting tool steps
36
36
 
37
- Workflows built with `.tool()` serialize to the same declarative entries that [stored workflows](https://mastra.ai/docs/workflows/stored-workflows) use. Only `retries` and `metadata` round-trip through storage. A function-valued `scorers` option throws an error when the workflow is stored.
37
+ Workflows built with `.tool()` serialize to the same declarative entries that [dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows) use. Only `retries` and `metadata` round-trip through storage. A function-valued `scorers` option throws an error when the workflow is stored.
38
38
 
39
39
  ## Related
40
40
 
41
41
  - [Agents and Tools](https://mastra.ai/docs/workflows/agents-and-tools)
42
- - [Stored workflows](https://mastra.ai/docs/workflows/stored-workflows)
42
+ - [Dynamic workflows](https://mastra.ai/docs/workflows/dynamic-workflows)
43
43
  - [Workflow.agent()](https://mastra.ai/reference/workflows/workflow-methods/agent)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @mastra/mcp-docs-server
2
2
 
3
+ ## 1.2.15-alpha.8
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`6445eba`](https://github.com/mastra-ai/mastra/commit/6445eba6020abac681aba1cc9289f446cb400cbe), [`df31eb0`](https://github.com/mastra-ai/mastra/commit/df31eb0c7087d782a0d9346e467f9a4af4b0eef6), [`fcd0667`](https://github.com/mastra-ai/mastra/commit/fcd0667a4e378be35c9a1b1eb19cce78fbfd7282), [`bab06b1`](https://github.com/mastra-ai/mastra/commit/bab06b18923873a584bdfc71a6b4ec7fb4727fb7)]:
8
+ - @mastra/core@1.58.0-alpha.5
9
+
10
+ ## 1.2.15-alpha.7
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies [[`76e5132`](https://github.com/mastra-ai/mastra/commit/76e51328dbc0749c8304e6b3f21e4401f451b081), [`0282e16`](https://github.com/mastra-ai/mastra/commit/0282e16115538c8e9b248b90f0748eb01cb5dc98)]:
15
+ - @mastra/core@1.58.0-alpha.4
16
+
3
17
  ## 1.2.15-alpha.6
4
18
 
5
19
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/mcp-docs-server",
3
- "version": "1.2.15-alpha.6",
3
+ "version": "1.2.15-alpha.9",
4
4
  "description": "MCP server for accessing Mastra.ai documentation, changelogs, and news.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -28,8 +28,8 @@
28
28
  "jsdom": "^26.1.0",
29
29
  "local-pkg": "^1.1.2",
30
30
  "zod": "^4.4.3",
31
- "@mastra/mcp": "^1.16.0-alpha.1",
32
- "@mastra/core": "1.58.0-alpha.3"
31
+ "@mastra/core": "1.58.0-alpha.5",
32
+ "@mastra/mcp": "^1.16.0-alpha.1"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@hono/node-server": "^2.0.0",
@@ -45,9 +45,9 @@
45
45
  "tsx": "^4.23.1",
46
46
  "typescript": "^6.0.3",
47
47
  "vitest": "4.1.10",
48
- "@internal/lint": "0.0.121",
49
- "@mastra/core": "1.58.0-alpha.3",
50
- "@internal/types-builder": "0.0.96"
48
+ "@internal/types-builder": "0.0.96",
49
+ "@mastra/core": "1.58.0-alpha.5",
50
+ "@internal/lint": "0.0.121"
51
51
  },
52
52
  "homepage": "https://mastra.ai",
53
53
  "repository": {