@mastra/mcp-docs-server 1.3.6 → 1.3.7-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/.docs/docs/agents/guardrails.md +2 -2
  2. package/.docs/docs/auth/fga.md +0 -1
  3. package/.docs/docs/deployment/workers.md +1 -1
  4. package/.docs/docs/evals/datasets.md +5 -6
  5. package/.docs/docs/evals/gates-and-verdicts.md +3 -3
  6. package/.docs/docs/mastra-platform/deploy.md +8 -1
  7. package/.docs/docs/mastra-platform/system-environment-variables.md +1 -1
  8. package/.docs/docs/mastra-platform/trace-intelligence.md +1 -1
  9. package/.docs/docs/mastra-platform/workspaces.md +2 -2
  10. package/.docs/docs/memory/multi-user-threads.md +1 -1
  11. package/.docs/docs/memory/observational-memory.md +17 -15
  12. package/.docs/docs/observability/metrics/overview.md +1 -1
  13. package/.docs/docs/observability/tracing/overview.md +6 -0
  14. package/.docs/docs/sandbox/computer.md +13 -13
  15. package/.docs/docs/sandbox/overview.md +5 -5
  16. package/.docs/docs/server/custom-adapters.md +1 -1
  17. package/.docs/docs/server/server-adapters.md +1 -1
  18. package/.docs/docs/studio/auth.md +1 -1
  19. package/.docs/docs/workflows/control-flow.md +28 -0
  20. package/.docs/docs/workflows/time-travel.md +1 -1
  21. package/.docs/integrations/databases/clickhouse.md +13 -0
  22. package/.docs/integrations/observability/langfuse.md +8 -0
  23. package/.docs/integrations/observability/opentelemetry.md +2 -0
  24. package/.docs/models/gateways/vercel.md +1 -8
  25. package/.docs/models/index.md +1 -1
  26. package/.docs/models/providers/edenai.md +4 -3
  27. package/.docs/models/providers/kilo.md +6 -6
  28. package/.docs/models/providers/llmgateway-providers.md +1 -2
  29. package/.docs/models/providers/nano-gpt.md +24 -24
  30. package/.docs/models/providers/nearai.md +6 -1
  31. package/.docs/reference/auth/better-auth.md +1 -1
  32. package/.docs/reference/auth/clerk.md +1 -1
  33. package/.docs/reference/auth/neon.md +2 -2
  34. package/.docs/reference/datasets/compareExperiments.md +18 -9
  35. package/.docs/reference/datasets/dataset.md +3 -1
  36. package/.docs/reference/datasets/finalizeExperiment.md +2 -2
  37. package/.docs/reference/datasets/listExperiments.md +2 -2
  38. package/.docs/reference/datasets/submitExperimentResult.md +1 -1
  39. package/.docs/reference/editor/tools.md +11 -3
  40. package/.docs/reference/evals/completeness.md +3 -3
  41. package/.docs/reference/evals/context-precision.md +1 -1
  42. package/.docs/reference/evals/create-scorer.md +3 -7
  43. package/.docs/reference/evals/faithfulness.md +6 -4
  44. package/.docs/reference/evals/filter-run.md +2 -2
  45. package/.docs/reference/evals/trajectory-accuracy.md +3 -2
  46. package/.docs/reference/index.md +0 -1
  47. package/.docs/reference/memory/listThreads.md +1 -1
  48. package/.docs/reference/memory/observational-memory.md +3 -3
  49. package/.docs/reference/migrations/mcp-v2.md +2 -2
  50. package/.docs/reference/migrations/upgrade-to-v1/agent.md +1 -1
  51. package/.docs/reference/migrations/vnext-to-standard-apis.md +1 -1
  52. package/.docs/reference/observability/feedback.md +1 -1
  53. package/.docs/reference/observability/metrics/automatic-metrics.md +11 -1
  54. package/.docs/reference/observability/tracing/interfaces.md +26 -0
  55. package/.docs/reference/observability/tracing/spans.md +2 -0
  56. package/.docs/reference/processors/moderation-processor.md +1 -1
  57. package/.docs/reference/processors/prompt-injection-detector.md +2 -2
  58. package/.docs/reference/processors/provider-history-compat.md +12 -8
  59. package/.docs/reference/processors/regex-filter-processor.md +1 -1
  60. package/.docs/reference/processors/system-prompt-scrubber.md +3 -3
  61. package/.docs/reference/processors/token-limiter-processor.md +2 -2
  62. package/.docs/reference/rag/graph-rag.md +1 -1
  63. package/.docs/reference/server/create-route.md +1 -1
  64. package/.docs/reference/server/elysia-adapter.md +1 -1
  65. package/.docs/reference/server/express-adapter.md +1 -1
  66. package/.docs/reference/server/fastify-adapter.md +1 -1
  67. package/.docs/reference/server/hono-adapter.md +2 -2
  68. package/.docs/reference/server/koa-adapter.md +1 -1
  69. package/.docs/reference/server/nestjs-adapter.md +1 -1
  70. package/.docs/reference/server/routes.md +1 -1
  71. package/.docs/reference/storage/composite.md +34 -0
  72. package/.docs/reference/storage/overview.md +3 -3
  73. package/.docs/reference/streaming/agents/MastraModelOutput.md +1 -1
  74. package/.docs/reference/streaming/agents/streamUntilIdle.md +1 -1
  75. package/.docs/reference/streaming/workflows/timeTravelStream.md +6 -4
  76. package/.docs/reference/tools/document-chunker-tool.md +8 -8
  77. package/.docs/reference/tools/mcp-client.md +1 -1
  78. package/.docs/reference/tools/mcp-server.md +17 -0
  79. package/.docs/reference/tools/submit-plan-tool.md +2 -0
  80. package/.docs/reference/tools/vector-query-tool.md +4 -4
  81. package/.docs/reference/vectors/astra.md +1 -1
  82. package/.docs/reference/vectors/azure-ai-search.md +1 -0
  83. package/.docs/reference/vectors/chroma.md +9 -5
  84. package/.docs/reference/vectors/convex.md +1 -3
  85. package/.docs/reference/vectors/couchbase.md +4 -9
  86. package/.docs/reference/vectors/duckdb.md +1 -1
  87. package/.docs/reference/vectors/libsql.md +1 -1
  88. package/.docs/reference/vectors/mongodb.md +2 -1
  89. package/.docs/reference/vectors/pg.md +16 -11
  90. package/.docs/reference/vectors/pinecone.md +8 -4
  91. package/.docs/reference/vectors/qdrant.md +8 -4
  92. package/.docs/reference/vectors/s3vectors.md +8 -4
  93. package/.docs/reference/vectors/turbopuffer.md +12 -6
  94. package/.docs/reference/vectors/upstash.md +10 -4
  95. package/.docs/reference/vectors/vectorize.md +7 -3
  96. package/.docs/reference/vectors/weaviate.md +1 -1
  97. package/.docs/reference/voice/composite-voice.md +15 -15
  98. package/.docs/reference/voice/mastra-voice.md +15 -11
  99. package/.docs/reference/voice/voice.addInstructions.md +1 -1
  100. package/.docs/reference/voice/voice.addTools.md +1 -1
  101. package/.docs/reference/voice/voice.answer.md +1 -1
  102. package/.docs/reference/voice/voice.close.md +1 -1
  103. package/.docs/reference/voice/voice.events.md +2 -2
  104. package/.docs/reference/voice/voice.listen.md +1 -1
  105. package/.docs/reference/voice/voice.off.md +1 -1
  106. package/.docs/reference/voice/voice.on.md +1 -1
  107. package/.docs/reference/voice/voice.send.md +2 -2
  108. package/.docs/reference/voice/voice.updateConfig.md +1 -1
  109. package/.docs/reference/workflows/dynamic-workflow-definition.md +3 -2
  110. package/.docs/reference/workflows/run-methods/cancel.md +1 -2
  111. package/.docs/reference/workflows/run-methods/resume.md +2 -0
  112. package/.docs/reference/workflows/run-methods/timeTravel.md +27 -0
  113. package/.docs/reference/workflows/run.md +14 -0
  114. package/.docs/reference/workflows/workflow-methods/agent.md +1 -1
  115. package/.docs/reference/workflows/workflow-methods/branch.md +4 -4
  116. package/.docs/reference/workflows/workflow-methods/classifier.md +1 -1
  117. package/.docs/reference/workflows/workflow-methods/create-run.md +2 -2
  118. package/.docs/reference/workflows/workflow-methods/dountil.md +1 -1
  119. package/.docs/reference/workflows/workflow-methods/dowhile.md +1 -1
  120. package/.docs/reference/workflows/workflow-methods/sleepUntil.md +1 -1
  121. package/.docs/reference/workspace/filesystem.md +10 -13
  122. package/.docs/reference/workspace/local-filesystem.md +5 -5
  123. package/.docs/reference/workspace/local-sandbox.md +1 -1
  124. package/.docs/reference/workspace/process-manager.md +2 -2
  125. package/.docs/reference/workspace/workspace-class.md +4 -4
  126. package/package.json +4 -4
  127. package/.docs/reference/agents/getTools.md +0 -31
@@ -232,7 +232,7 @@ inputProcessors: [
232
232
 
233
233
  ## Violation callbacks
234
234
 
235
- All processors support an `onViolation` callback that fires when a policy violation is detected, regardless of strategy. Use it for side effects like alerting, logging to external systems, or sending notifications.
235
+ Processors support an `onViolation` callback that fires when a policy violation aborts the run, for example with the `block` strategy. Aborts from `processToolResult`, and from processor workflows while streaming output, don't call it. Some processors also call it directly: `RegexFilterProcessor` when it redacts content, and `TokenCostControl` when it warns. Strategies that only log, such as `ModerationProcessor`'s `warn`, don't call it. Use it for side effects like alerting, logging to external systems, or sending notifications.
236
236
 
237
237
  The callback receives a `ProcessorViolation` object with `processorId`, `message`, and `detail` (processor-specific metadata).
238
238
 
@@ -263,7 +263,7 @@ moderation.onViolation = ({ processorId, message, detail }) => {
263
263
  }
264
264
  ```
265
265
 
266
- The `onViolation` property is part of the base [`Processor` interface](https://mastra.ai/reference/processors/processor-interface), so any processor, including custom ones, can use it. The runner automatically invokes `onViolation` when any processor calls `abort()`. For processors using a `warn` strategy (like `TokenCostControl`), the callback also fires on warnings without blocking the request.
266
+ The `onViolation` property is part of the base [`Processor` interface](https://mastra.ai/reference/processors/processor-interface), so any processor, including custom ones, can use it. The runner automatically invokes `onViolation` when a processor calls `abort()`, except on the paths noted above. For processors using a `warn` strategy (like `TokenCostControl`), the callback also fires on warnings without blocking the request.
267
267
 
268
268
  Errors thrown by runner-invoked callbacks after `abort()` are silently caught to prevent interfering with the processor's main logic. On the `TokenCostControl` warning path, callback errors are caught and logged through the Mastra logger.
269
269
 
@@ -79,7 +79,6 @@ resourceMapping: {
79
79
  - `user`: the authenticated user
80
80
  - `resourceId`: the owning Mastra resource ID when available (for example, a thread's `resourceId`)
81
81
  - `requestContext`: the current request context for advanced tenant resolution
82
- - `metadata`: provider-specific metadata for the attempted action
83
82
 
84
83
  Return `undefined` from `deriveId()` to fall back to the original Mastra resource ID.
85
84
 
@@ -146,7 +146,7 @@ Workers are internal infrastructure. They're not exposed to end users and don't
146
146
  In a split deployment:
147
147
 
148
148
  - **The API server is the only public-facing process**: It serves all client HTTP requests. These requests include REST endpoints and agent interactions, plus workflow triggers and custom routes.
149
- - **Workers connect outbound only**: They pull events from the distributed PubSub backend and read/write to the shared storage database. They don't accept inbound traffic from clients.
149
+ - **Workers don't serve client traffic**: They pull events from the distributed PubSub backend and read/write to the shared storage database. Each worker process also listens on `PORT` (default `4111`) for internal health checks. `/health` reports readiness and `/config` returns the worker configuration to authorized callers. Keep this port on the private network.
150
150
  - **The orchestration worker calls the API internally**: It sends step execution requests to the API over the container network using `MASTRA_STEP_EXECUTION_URL`. This is internal service-to-service communication, not a public endpoint.
151
151
 
152
152
  All three worker types (orchestration, scheduler, background task) sit behind the API on a private network. They share access to the PubSub backend and storage database but never receive traffic directly from clients. HTTP routes for worker-related features run on the API server rather than the worker process. One example is creating a token for a voice integration.
@@ -219,7 +219,7 @@ MongoDB storage requires a replica set or sharded deployment with transaction su
219
219
 
220
220
  ## Listing and searching items
221
221
 
222
- [`listItems()`](https://mastra.ai/reference/datasets/listItems) supports pagination and full-text search:
222
+ [`listItems()`](https://mastra.ai/reference/datasets/listItems) supports pagination and case-insensitive substring search:
223
223
 
224
224
  ```typescript
225
225
  // Paginated list
@@ -228,7 +228,7 @@ const { items, pagination } = await dataset.listItems({
228
228
  perPage: 50,
229
229
  })
230
230
 
231
- // Full-text search
231
+ // Substring search
232
232
  const { items: matches } = await dataset.listItems({
233
233
  search: 'Hello',
234
234
  })
@@ -240,11 +240,10 @@ const { items: v2Matches } = await dataset.listItems({
240
240
  page: 0,
241
241
  perPage: 50,
242
242
  })
243
-
244
- // Version-only snapshot returns a bare DatasetItem[]
245
- const v2Items = await dataset.listItems({ version: 2 })
246
243
  ```
247
244
 
245
+ Calling `listItems({ version })` without `search`, `page`, or `perPage` returns a bare `DatasetItem[]`. This form is deprecated. Pass `page` and `perPage` to always receive the paginated shape.
246
+
248
247
  ## Versioning
249
248
 
250
249
  Adding, updating, or deleting dataset items bumps the dataset version. Purging an item's stored content with [`purgeItem()`](https://mastra.ai/reference/datasets/purgeItem) doesn't create a new version. This lets you pin experiments to a specific snapshot of the data while erasing sensitive content without changing the version history.
@@ -278,7 +277,7 @@ for (const row of history) {
278
277
  Fetch the exact items that existed at a past version:
279
278
 
280
279
  ```typescript
281
- const items = await dataset.listItems({ version: 2 })
280
+ const { items } = await dataset.listItems({ version: 2, page: 0, perPage: 100 })
282
281
  ```
283
282
 
284
283
  You can also pin experiments to a version, see [running experiments](https://mastra.ai/docs/evals/experiments). Visit the [`Dataset` reference](https://mastra.ai/reference/datasets/dataset) for the full list of methods and parameters.
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Gates and verdicts
6
6
 
7
- Gates and verdicts add severity semantics to `runEvals`. Gates are scorers that must score 1.0, hard requirements that block a run. Thresholds are minimum acceptable scores on tracked metrics. The verdict summarizes the outcome as `passed`, `scored`, or `failed`.
7
+ Gates and verdicts add severity semantics to `runEvals`. Gates are scorers that must score 1.0, hard requirements that block a run. Thresholds are lower and/or upper bounds on the average score of tracked metrics. The verdict summarizes the outcome as `passed`, `scored`, or `failed`.
8
8
 
9
9
  ## When to use gates and verdicts
10
10
 
@@ -50,7 +50,7 @@ The verdict field is omitted when no gates or threshold-bearing scorers are prov
50
50
 
51
51
  ## Gates
52
52
 
53
- Gates are scorers passed via the `gates` field. They run before regular scorers on each data item. A gate must average a score of 1.0 across all data items to pass.
53
+ Gates are scorers passed via the `gates` field. They run before regular scorers on each data item. A gate must average a score of 1.0 across the data items it could score to pass. Items where the gate returns `notScorable()` are excluded from the average, and a gate that throws an error counts as 0 for that item.
54
54
 
55
55
  ```typescript
56
56
  import { runEvals } from '@mastra/core/evals'
@@ -87,7 +87,7 @@ You must provide at least one scorer or gate, a run with neither throws an error
87
87
 
88
88
  ## Thresholds
89
89
 
90
- Wrap a scorer in `{ scorer, threshold }` to set pass/fail bounds. The threshold is compared against the scorer's average score across all data items.
90
+ Wrap a scorer in `{ scorer, threshold }` to set pass/fail bounds. The threshold is compared against the scorer's average score across scored data items. Results that return `notScorable()` are left out of the average.
91
91
 
92
92
  A `threshold` can be:
93
93
 
@@ -63,7 +63,14 @@ A local `.env` file is optional. Environment variables stored on the platform ar
63
63
  > })
64
64
  > ```
65
65
 
66
- If the build statically finds `backgroundTasks.enabled: true`, the deploy artifact includes a worker manifest. Mastra Cloud automatically provisions or updates a dedicated worker service from the same artifact. No separate toggle or add-on is required.
66
+ If the build statically finds `backgroundTasks.enabled: true`, the CLI decides whether to run background tasks on a dedicated worker service or in-process inside the API server container:
67
+
68
+ - A dedicated worker service requires Redis for coordination. Without a usable `REDIS_URL` in the deploy env, background tasks run in-process.
69
+ - With Redis available, the CLI uses a dedicated worker service when the environment already has one, when you pass `--yes`, or when the deploy runs headless. Otherwise it asks whether to provision one.
70
+ - Pass `--workers dedicated` or `--workers in-process` to skip the decision. `--workers dedicated` fails if `REDIS_URL` is missing.
71
+ - Dedicated worker services are rolling out gradually, so for organizations without access the CLI omits the worker manifest and background tasks run in-process, even with Redis and `--workers dedicated`.
72
+
73
+ When a dedicated worker service is chosen, the deploy artifact includes a worker manifest, and Mastra Cloud provisions or updates the worker service from the same artifact.
67
74
 
68
75
  Removing `backgroundTasks` or setting `enabled: false` in a later deploy removes the manifest and spins down the existing worker service. Values that can't be determined statically are omitted from the manifest display, but the worker process still reads the complete configuration from your bundled code.
69
76
 
@@ -37,7 +37,7 @@ Attaching a hosted database adds its connection variables to the environments th
37
37
  | -------- | ---------------------------------------- |
38
38
  | Turso | `TURSO_DATABASE_URL`, `TURSO_AUTH_TOKEN` |
39
39
  | Neon | `DATABASE_URL` |
40
- | Postgres | `POSTGRES_URL` |
40
+ | Postgres | `DATABASE_URL` |
41
41
 
42
42
  Values are resolved at deploy time and never stored in your project. An environment-scoped database replaces the values of a project-scoped database of the same provider for that environment.
43
43
 
@@ -83,7 +83,7 @@ Entities appear while their signals are still collecting or processing. The inde
83
83
 
84
84
  ### Configure a custom signal
85
85
 
86
- Users with project management permission can configure custom signals without leaving Intelligence:
86
+ Organization admins can configure custom signals without leaving Intelligence:
87
87
 
88
88
  1. Return to the entity index and select **Signal settings**.
89
89
  2. Select **Create signal**, provide a stable signal name, display label, description, and signal instructions, then save it. Definitions and their versions are shared across the organization.
@@ -82,8 +82,8 @@ export const mastra = new Mastra({
82
82
 
83
83
  - `start()` provisions a fresh sandbox (or reattaches when you passed `sandboxId`).
84
84
  - `executeCommand()` runs commands against it.
85
- - `stop()` tears down the remote sandbox while preserving its recovery checkpoint when it has one.
86
- - `destroy()` also releases the recovery checkpoint associated with a caller-supplied recovery `id`.
85
+ - `stop()` releases this process's lease without touching the remote sandbox. The VM keeps running under the environment's idle policy, and a later `start()` with the same `id` or `sandboxId` reattaches to it.
86
+ - `destroy()` releases the VM. On Railway, it also deletes the recovery checkpoint associated with a caller-supplied recovery `id`. On E2B, it only kills the VM, and any snapshot you captured remains yours to manage.
87
87
 
88
88
  A statically configured `PlatformSandbox` is shared across every request and agent using that configuration rather than creating separate sandboxes for requests or memory threads. `PlatformFilesystem` is also a separate provider: configuring both providers doesn't mount the environment bucket inside the sandbox.
89
89
 
@@ -158,7 +158,7 @@ const memory = new Memory({
158
158
  })
159
159
  ```
160
160
 
161
- OM requires a storage adapter that supports it: `@mastra/libsql`, `@mastra/pg`, `@mastra/mongodb`, or `@mastra/oracledb`.
161
+ OM requires a storage adapter that supports it: `@mastra/libsql`, `@mastra/pg`, `@mastra/mongodb`, `@mastra/mysql`, `@mastra/convex`, or `@mastra/oracledb`.
162
162
 
163
163
  > **Note:** If you switch the Observer to a less capable model and see facts attributed to a generic `User` instead of individual participants, use [`observation.instruction`](https://mastra.ai/reference/memory/observational-memory) to explain how to interpret the `<turn>` tag.
164
164
 
@@ -468,7 +468,7 @@ With default settings, the context window doesn't grow unbounded. It oscillates
468
468
  3. **Repeat**: History grows from \~6k back toward 30k and shrinks again. Each cycle appends to the observation log, which grows much more slowly than raw history.
469
469
  4. **Observations reach 40k**: The Reflector creates a smaller log from the current observations and any earlier reflections.
470
470
 
471
- In the normal buffered cycle, raw history oscillates between roughly 6k and 30k tokens. The observation log stays around 40k tokens, however long the conversation runs. These are activation thresholds rather than hard caps, so history can grow past the threshold whenever background buffering doesn't keep pace. Above `blockAfter` (default `1.2`, \~36k tokens) activation is allowed to overshoot the retention target instead of activating fewer chunks. It doesn't drain the buffer, and with the default settings it removes the same amount of history as below the threshold. Reflection falls back to a synchronous run above its own `blockAfter` (\~48k tokens).
471
+ In the normal buffered cycle, raw history oscillates between roughly 6k and 30k tokens. The observation log stays around 40k tokens, however long the conversation runs. These are activation thresholds rather than hard caps, so history can grow past the threshold whenever background buffering doesn't keep pace. Between the threshold and `blockAfter` (default `1.2`, \~36k tokens), buffering keeps running in the background and the next ready chunk activates without blocking the agent. At `blockAfter`, a synchronous observation runs if no buffered chunk activates. Reflection falls back to a synchronous run above its own `blockAfter` (\~48k tokens).
472
472
 
473
473
  With [`shareTokenBudget`](https://mastra.ai/reference/memory/observational-memory) enabled, the two budgets pool together. While the observation log is small, message history can expand into the unused observation space (up to \~70k tokens with the defaults) before observation triggers. It then shrinks as observations accumulate.
474
474
 
@@ -796,23 +796,25 @@ When message tokens reach the `messageTokens` threshold, buffered chunks activat
796
796
 
797
797
  Async buffered Observer calls don't generate continuation hints because delayed hints can be stale by activation time. When buffered chunks activate, any previously stored suggested response and current task are cleared. The main agent receives the compressed observations without those hints.
798
798
 
799
- When message production outpaces the Observer, the `blockAfter` safety threshold allows activation to overshoot the retention target instead of using fewer chunks. Activation still uses no more chunks than needed to reach the target, and the default settings remain unaffected. A synchronous observation runs when the `messageTokens` threshold is reached and activating buffered chunks doesn't bring pending tokens back under it. For example, this happens when a large tool result arrives after buffering has stopped. Buffered activation usually preserves a minimum remaining context (the smaller of \~1k tokens or the configured retention floor), but a single buffered chunk that covers the whole pending window still activates and can leave less.
799
+ When message production outpaces the Observer, history can pass `messageTokens` before a buffered chunk is ready. Between `messageTokens` and `blockAfter`, Mastra keeps buffering in the background and activates the chunk on a later step, so the agent doesn't wait on the Observer. A synchronous observation runs if pending tokens still reach `blockAfter` after buffered activation, for example when a large tool result leaves an uncovered tail. Above `blockAfter`, activation may also overshoot the retention target instead of using fewer chunks. Buffered activation usually preserves a minimum remaining context (the smaller of \~1k tokens or the configured retention floor), but a single buffered chunk that covers the whole pending window still activates and can leave less.
800
+
801
+ At `blockAfter`, activation waits a bounded time for a buffered observation that's still being produced so it activates with the rest. If that takes longer, Mastra observes the remaining messages synchronously. A late observation whose messages are all already observed is then dropped instead of stored. Activations triggered by the idle TTL or a model change don't wait.
800
802
 
801
803
  Reflection works similarly: the Reflector runs in the background when observations reach a fraction of the reflection threshold.
802
804
 
803
805
  ### Settings
804
806
 
805
- | Setting | Default | What it controls |
806
- | ------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
807
- | `observation.bufferTokens` | `0.2` | How often to buffer. `0.2` means every 20% of `messageTokens`. With the default 30k threshold, that's roughly every 6k tokens. Can also be an absolute token count (e.g. `5000`). |
808
- | `observation.bufferActivation` | `0.8` | How aggressively to clear the message window on activation. `0.8` means remove enough messages to keep only 20% of `messageTokens` remaining. Lower values keep more message history. |
809
- | `observation.blockAfter` | `1.2` | Safety net if buffering can't keep up. Values from 1 up to (but not including) 100 multiply `messageTokens`. For example, `1.2` creates a threshold of 36k tokens (1.2 × 30k), above which activation may overshoot the retention target rather than use fewer chunks. Values of 100 or more are absolute token counts (e.g. `50_000`) and must be greater than `messageTokens`. |
810
- | `activateAfterIdle` | none | Forces buffered observations to activate after a period of inactivity, even before `observation.messageTokens` is reached. Accepts a numeric millisecond value such as `300_000`, duration strings like `"5m"` or `"1hr"`, `"auto"` for a provider-aware prompt cache TTL, or an object of per-provider TTLs such as `{ default: 'auto', anthropic: '1h' }`. |
811
- | `activateOnProviderChange` | `false` | Forces buffered observations to activate when the next step uses a different `provider/model` than the one that produced the latest assistant step. Use this when switching providers or models would invalidate prompt cache reuse. |
812
- | `reflection.bufferActivation` | `0.5` | When to start background reflection. `0.5` means reflection begins when observations reach 50% of the `observationTokens` threshold. |
813
- | `reflection.activateAfterIdle` | none | Opts buffered reflections into idle activation. Reflections don't inherit top-level `activateAfterIdle`. |
814
- | `reflection.activateOnProviderChange` | `false` | Opts buffered reflections into provider-change activation. Reflections don't inherit top-level `activateOnProviderChange`. |
815
- | `reflection.blockAfter` | `1.2` | Safety threshold for reflection. Same value format as observation (absolute values must be greater than `observationTokens`), but above it reflection runs synchronously when no buffered reflection is ready to activate. |
807
+ | Setting | Default | What it controls |
808
+ | ------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
809
+ | `observation.bufferTokens` | `0.2` | How often to buffer. `0.2` means every 20% of `messageTokens`. With the default 30k threshold, that's roughly every 6k tokens. Can also be an absolute token count (e.g. `5000`). |
810
+ | `observation.bufferActivation` | `0.8` | How aggressively to clear the message window on activation. `0.8` means remove enough messages to keep only 20% of `messageTokens` remaining. Lower values keep more message history. |
811
+ | `observation.blockAfter` | `1.2` | Safety net if buffering can't keep up. Values from 1 up to (but not including) 100 multiply `messageTokens`. For example, `1.2` creates a threshold of 36k tokens (1.2 × 30k). Below it, only background buffering and activation run. Observation runs synchronously if pending tokens still reach it after buffered activation. Activation may also overshoot the retention target. Values of 100 or more are absolute token counts (e.g. `50_000`) and must be greater than `messageTokens`. Set `1` to observe synchronously at `messageTokens`. |
812
+ | `activateAfterIdle` | none | Forces buffered observations to activate after a period of inactivity, even before `observation.messageTokens` is reached. Accepts a numeric millisecond value such as `300_000`, duration strings like `"5m"` or `"1hr"`, `"auto"` for a provider-aware prompt cache TTL, or an object of per-provider TTLs such as `{ default: 'auto', anthropic: '1h' }`. |
813
+ | `activateOnProviderChange` | `false` | Forces buffered observations to activate when the next step uses a different `provider/model` than the one that produced the latest assistant step. Use this when switching providers or models would invalidate prompt cache reuse. |
814
+ | `reflection.bufferActivation` | `0.5` | When to start background reflection. `0.5` means reflection begins when observations reach 50% of the `observationTokens` threshold. |
815
+ | `reflection.activateAfterIdle` | none | Opts buffered reflections into idle activation. Reflections don't inherit top-level `activateAfterIdle`. |
816
+ | `reflection.activateOnProviderChange` | `false` | Opts buffered reflections into provider-change activation. Reflections don't inherit top-level `activateOnProviderChange`. |
817
+ | `reflection.blockAfter` | `1.2` | Safety threshold for reflection. Same value format as observation (absolute values must be greater than `observationTokens`), but above it reflection runs synchronously when no buffered reflection is ready to activate. |
816
818
 
817
819
  If you're relying on prompt caching, set `activateAfterIdle` to `"auto"` or to a specific cache TTL. That way, once a thread has been idle long enough for the cache to expire, the next request can activate buffered observations first and send a smaller compressed context window.
818
820
 
@@ -909,9 +911,9 @@ const memory = new Memory({
909
911
  })
910
912
  ```
911
913
 
912
- - `previousObserverTokens: 2000` → default. Keeps \~2k tokens of recent observations.
914
+ - `previousObserverTokens: false` → default. Sends the full previous observations.
915
+ - `previousObserverTokens: 2000` → keeps \~2k tokens of recent observations.
913
916
  - `previousObserverTokens: 0` → omit previous observations completely.
914
- - `previousObserverTokens: false` → disable truncation and keep full previous observations.
915
917
 
916
918
  ## Hooks
917
919
 
@@ -10,7 +10,7 @@ Mastra emits:
10
10
 
11
11
  - **Duration metrics** for agent runs, workflows, tools, model calls, and processors
12
12
  - **Token usage metrics** for model input and output, including detailed token categories when the provider reports them
13
- - **Cost estimates** calculated from token usage, provider, model, and an embedded pricing registry
13
+ - **Cost estimates** calculated from token usage, provider, model, and model prices from [models.dev](https://models.dev)
14
14
 
15
15
  Metrics retain trace correlation context, so you can investigate a change in a chart by finding the related span. See the [Automatic metrics reference](https://mastra.ai/reference/observability/metrics/automatic-metrics) for metric names, labels, and cost fields.
16
16
 
@@ -919,6 +919,12 @@ app.post('/api/analyze', async (req, res) => {
919
919
 
920
920
  This creates a single distributed trace that includes both the HTTP request handling and the Mastra agent execution, viewable in your observability platform of choice.
921
921
 
922
+ ### MCP calls
923
+
924
+ Model Context Protocol (MCP) calls link the caller's trace and the server's trace without any setup. When an agent or workflow calls a tool through `MCPClient`, the `MCPServer` that handles it keeps its own trace and records a link to the tool call span, and the tool call span links back to the server's span. Each side keeps its own trace, root span, and trace summary. When the server uses a tracing bridge and its HTTP instrumentation continues the caller's trace, the request joins that trace instead. Mastra storage saves the links with the spans, and exporters with span link support send them too.
925
+
926
+ This also works with non-Mastra software on either side. See the [`MCPServer` reference](https://mastra.ai/reference/tools/mcp-server) for details, and the [`MCPClient` reference](https://mastra.ai/reference/tools/mcp-client) to send your own trace context.
927
+
922
928
  ## What gets traced
923
929
 
924
930
  Mastra automatically creates spans for:
@@ -10,19 +10,19 @@ Sandboxes that run a desktop environment can expose screenshot, mouse, and keybo
10
10
 
11
11
  ## Computer tools
12
12
 
13
- | Tool | Does |
14
- | -------------------------- | -------------------------------------------------------------------------------- |
15
- | `computer_screenshot` | Captures the desktop as a PNG image and returns it to the model as native media. |
16
- | `computer_click` | Presses and releases the left mouse button at pixel coordinates. |
17
- | `computer_double_click` | Presses the left mouse button twice at pixel coordinates. |
18
- | `computer_right_click` | Presses and releases the right mouse button at pixel coordinates. |
19
- | `computer_move_mouse` | Moves the cursor to pixel coordinates without pressing a button. |
20
- | `computer_drag` | Presses, drags, and releases between two points. |
21
- | `computer_type` | Types text into the focused element. |
22
- | `computer_press_key` | Presses a key or key combination, such as `Enter` or `ctrl+s`. |
23
- | `computer_scroll` | Scrolls up or down. |
24
- | `computer_get_screen_info` | Gets the screen dimensions and cursor position. |
25
- | `computer_wait` | Waits for the interface to settle. |
13
+ | Tool | Does |
14
+ | ------------------------------------------- | -------------------------------------------------------------------------------- |
15
+ | `mastra_workspace_computer_screenshot` | Captures the desktop as a PNG image and returns it to the model as native media. |
16
+ | `mastra_workspace_computer_click` | Presses and releases the left mouse button at pixel coordinates. |
17
+ | `mastra_workspace_computer_double_click` | Presses the left mouse button twice at pixel coordinates. |
18
+ | `mastra_workspace_computer_right_click` | Presses and releases the right mouse button at pixel coordinates. |
19
+ | `mastra_workspace_computer_move_mouse` | Moves the cursor to pixel coordinates without pressing a button. |
20
+ | `mastra_workspace_computer_drag` | Presses, drags, and releases between two points. |
21
+ | `mastra_workspace_computer_type` | Types text into the focused element. |
22
+ | `mastra_workspace_computer_press_key` | Presses a key or key combination, such as `Enter` or `ctrl+s`. |
23
+ | `mastra_workspace_computer_scroll` | Scrolls up or down. |
24
+ | `mastra_workspace_computer_get_screen_info` | Gets the screen dimensions and cursor position. |
25
+ | `mastra_workspace_computer_wait` | Waits for the interface to settle. |
26
26
 
27
27
  ## Configure computer tools
28
28
 
@@ -49,11 +49,11 @@ A static sandbox is shared across every request and memory thread that uses the
49
49
 
50
50
  Agents receive tools for the capabilities supported by the sandbox backend:
51
51
 
52
- | Tool | Does |
53
- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
54
- | `execute_command` | Runs a shell command and returns stdout, stderr, and the exit code. Supports `background: true` when the backend can spawn long-running processes. |
55
- | `get_process_output` | Gets stdout, stderr, and status for a background process. Supports `tail` to limit output and `wait: true` to wait for the process to exit. This tool and `kill_process` are only added when the backend supports background processes. |
56
- | `kill_process` | Stops a background process and returns its recent output. |
52
+ | Tool | Does |
53
+ | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
54
+ | `execute_command` | Runs a shell command and returns stdout, stderr, and the exit code. Supports `background: true` when the backend can spawn long-running processes. |
55
+ | `get_process_output` | Gets stdout, stderr, and status for a background process. Supports `tail` to limit output and `wait: true` to wait for the process to exit. For a static sandbox, this tool and `kill_process` are only added when the backend supports background processes. Workspaces that resolve their sandbox per request always include both tools, because capabilities aren't known until the sandbox resolves. |
56
+ | `kill_process` | Stops a background process and returns its recent output. |
57
57
 
58
58
  Configured capabilities determine which tools are available. Tool configuration can then disable, rename, or add policies to those tools:
59
59
 
@@ -162,7 +162,7 @@ async getParams(
162
162
  request: MyRequest
163
163
  ): Promise<{
164
164
  urlParams: Record<string, string>;
165
- queryParams: Record<string, string>;
165
+ queryParams: Record<string, string | string[]>; // repeated keys (?tag=a&tag=b) become arrays
166
166
  body: unknown;
167
167
  }> {
168
168
  return {
@@ -823,7 +823,7 @@ When using adapters, configure these features directly with your framework. For
823
823
 
824
824
  Server adapters register MCP (Model Context Protocol) routes during `registerRoutes()` when MCP servers are configured in your Mastra instance. MCP allows external tools and services to connect to your Mastra server and interact with your agents.
825
825
 
826
- Each server is exposed at `/api/mcp/:serverId/mcp` over Streamable HTTP. Because every request is self-contained, the routes work unchanged in serverless environments like Cloudflare Workers or Vercel Edge.
826
+ Each server is exposed at `/api/mcp/:serverId/mcp` over Streamable HTTP. By default the transport keeps session state between requests. For serverless environments like Cloudflare Workers or Vercel Edge, set `mcpOptions: { serverless: true }` to run in stateless mode without session management.
827
827
 
828
828
  Pass `mcpOptions` to control how the authenticated principal reaches tools. When using the Mastra deployer (the standard `mastra dev` / `mastra build` path), set it in your server config:
829
829
 
@@ -124,7 +124,7 @@ Permissions follow the pattern `{resource}:{action}`, with optional resource-lev
124
124
  | `agents:execute` | Execute agents only |
125
125
  | `agents:read:my-id` | Read a specific agent by ID |
126
126
 
127
- Resources include `agents`, `workflows`, `tools`, `datasets`, `memory`, `scores`, `observability`, and others. Actions are `read`, `write`, `execute`, and `delete`.
127
+ Resources include `agents`, `workflows`, `tools`, `datasets`, `memory`, `scores`, `observability`, and others. Actions are `read`, `write`, `create`, `delete`, `execute`, `publish`, and `share`.
128
128
 
129
129
  ### Map external provider roles
130
130
 
@@ -519,6 +519,34 @@ export const testWorkflow = createWorkflow({})
519
519
  .commit();
520
520
  ```
521
521
 
522
+ ### Passing data between iterations
523
+
524
+ Each iteration of `.dountil()` or `.dowhile()` receives the previous iteration's output as its `inputData`. When input validation is enabled (the default), that output is validated against the loop body's `inputSchema` before the body runs. With an object schema such as `z.object()`, keys the schema doesn't declare are removed. Schemas that allow unknown keys, such as `.passthrough()`, keep them.
525
+
526
+ When the loop body is a nested workflow, the output is validated against the nested workflow's `inputSchema` and then against its first step's `inputSchema`. A value is only available on the next iteration if the nested workflow returns it and both schemas declare it. This includes values produced inside the nested workflow, such as feedback from a step that suspended and resumed.
527
+
528
+ To carry data across iterations, declare it in the body's `inputSchema` and return it from the body's last step:
529
+
530
+ ```typescript
531
+ const loopSchema = z.object({
532
+ draft: z.string(),
533
+ feedback: z.string().optional(),
534
+ attempts: z.number(),
535
+ })
536
+
537
+ const reviewStep = createStep({
538
+ id: 'review',
539
+ inputSchema: loopSchema,
540
+ outputSchema: loopSchema,
541
+ execute: async ({ inputData }) => {
542
+ // ...
543
+ return { draft, feedback, attempts: inputData.attempts + 1 }
544
+ },
545
+ })
546
+ ```
547
+
548
+ For values that don't belong in the step's input, such as counters or audit data, use [workflow state](https://mastra.ai/docs/workflows/workflow-state) instead.
549
+
522
550
  ### Looping with `.foreach()`
523
551
 
524
552
  Use `.foreach()` to run the same step for each item in an array. The input must be of type `array` so the loop can iterate over its values, applying the step's logic to each one. See [Choosing the right pattern](#choosing-the-right-pattern) for guidance on when to use `.foreach()` vs other methods.
@@ -197,7 +197,7 @@ const result = await run.timeTravel({
197
197
 
198
198
  ## Error handling
199
199
 
200
- Time travel throws errors in specific situations:
200
+ Time travel throws errors in specific situations. It rejects a call that observes a running snapshot, but it doesn't atomically claim the run. Concurrent calls can both pass the status check and proceed, so guard against duplicates in your application. See [Concurrent time travel calls](https://mastra.ai/reference/workflows/run-methods/timeTravel).
201
201
 
202
202
  ### Running workflow
203
203
 
@@ -232,6 +232,19 @@ The same `client` form is accepted by `ObservabilityStorageClickhouse` and `Obse
232
232
 
233
233
  `ClickhouseStore` also accepts every option from `ClickHouseClientConfigOptions` (such as `database`, `request_timeout`, `compression`, `keep_alive`, and `max_open_connections`).
234
234
 
235
+ `ClickhouseStore` and `ObservabilityStorageClickhouseVNext` apply `clickhouse_settings` to every query they run. On ClickHouse services that keep data in object storage, such as ClickHouse Cloud, limiting read-ahead lowers the memory each observability query uses, but queries that miss the local cache can run slower:
236
+
237
+ ```typescript
238
+ const observabilityStore = new ObservabilityStorageClickhouseVNext({
239
+ url: process.env.CLICKHOUSE_URL!,
240
+ username: process.env.CLICKHOUSE_USERNAME!,
241
+ password: process.env.CLICKHOUSE_PASSWORD!,
242
+ clickhouse_settings: {
243
+ filesystem_prefetches_limit: 8,
244
+ },
245
+ })
246
+ ```
247
+
235
248
  ### Replicated clusters
236
249
 
237
250
  Use `replication` when Mastra writes to a multi-replica ClickHouse cluster through a load balancer.
@@ -199,6 +199,14 @@ If you set a custom `traceName` via `mastra.metadata.traceName`, your value take
199
199
 
200
200
  A run started with `tracingOptions.nestUnderParent` doesn't own the trace, so the exporter doesn't write the trace name, input, output, metadata, user, or session from it. See [Nesting a run under an earlier Mastra run](https://mastra.ai/docs/observability/tracing/overview).
201
201
 
202
+ ## Filtering observations by span attributes
203
+
204
+ Observation-level evaluators in Langfuse filter on top-level observation metadata. The exporter promotes each scalar span attribute (string, number, or boolean) that the OpenTelemetry exporter writes as `mastra.<span_type>.<key>` to `langfuse.observation.metadata.<key>`, with the key converted to camelCase. The exporter also sets `agentId`, `agentName`, `spanType`, and `operationName` on each observation.
205
+
206
+ For a `MODEL_STEP` span this produces `stepIndex` and `isContinued`. To judge each agent run once, against the step that produced the final answer, filter an observation-level evaluator on `spanType` equals `model_step` and `isContinued` equals `"false"`.
207
+
208
+ Values are sent as strings, so compare against string values such as `"false"` or `"1"`. Span input and output keep their own mapping, and attributes that hold objects or arrays stay in the nested `attributes` metadata only.
209
+
202
210
  ## Custom trace metadata
203
211
 
204
212
  Langfuse filters and groups traces by top-level metadata only. Nested metadata keys can't be used for filtering or grouping.
@@ -838,6 +838,8 @@ Both services must have:
838
838
  2. W3C Trace Context propagator enabled
839
839
  3. Mastra with `OtelBridge` configured
840
840
 
841
+ A Mastra `MCPServer` request over HTTP follows the same rule. With this setup, it joins the caller's trace. Without HTTP instrumentation on the server, each request keeps its own trace. In both cases, when a request carries a W3C `traceparent`, in `_meta` or as an HTTP header, the request span links to the caller's span, and the exporter and the bridge send that link as an OpenTelemetry span link. See [Linking to the caller's trace](https://mastra.ai/reference/tools/mcp-server).
842
+
841
843
  ### Using tags
842
844
 
843
845
  Tags help you categorize and filter traces in your OTEL backend. Add tags when executing agents or workflows:
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Vercel logo](https://models.dev/logos/vercel.svg)Vercel
6
6
 
7
- Vercel aggregates models from multiple providers with enhanced features like rate limiting and failover. Access 409 models through Mastra's model router.
7
+ Vercel aggregates models from multiple providers with enhanced features like rate limiting and failover. Access 402 models through Mastra's model router.
8
8
 
9
9
  Learn more in the [Vercel documentation](https://ai-sdk.dev/providers/ai-sdk-providers).
10
10
 
@@ -42,23 +42,16 @@ ANTHROPIC_API_KEY=ant-...
42
42
  | `alibaba/qwen-3-235b` |
43
43
  | `alibaba/qwen-3-30b` |
44
44
  | `alibaba/qwen-3-32b` |
45
- | `alibaba/qwen-3.6-max-preview` |
46
- | `alibaba/qwen3-235b-a22b-thinking` |
47
45
  | `alibaba/qwen3-coder` |
48
46
  | `alibaba/qwen3-coder-30b-a3b` |
49
47
  | `alibaba/qwen3-coder-next` |
50
- | `alibaba/qwen3-coder-plus` |
51
48
  | `alibaba/qwen3-embedding-0.6b` |
52
49
  | `alibaba/qwen3-embedding-4b` |
53
50
  | `alibaba/qwen3-embedding-8b` |
54
- | `alibaba/qwen3-max` |
55
- | `alibaba/qwen3-max-preview` |
56
51
  | `alibaba/qwen3-max-thinking` |
57
52
  | `alibaba/qwen3-next-80b-a3b-instruct` |
58
53
  | `alibaba/qwen3-next-80b-a3b-thinking` |
59
- | `alibaba/qwen3-vl-235b-a22b-instruct` |
60
54
  | `alibaba/qwen3-vl-instruct` |
61
- | `alibaba/qwen3-vl-thinking` |
62
55
  | `alibaba/qwen3.5-flash` |
63
56
  | `alibaba/qwen3.5-plus` |
64
57
  | `alibaba/qwen3.6-27b` |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Model Providers
6
6
 
7
- Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to 7822 models from 214 providers through a single API.
7
+ Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to 7820 models from 214 providers through a single API.
8
8
 
9
9
  ## Features
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Eden AI logo](https://models.dev/logos/edenai.svg)Eden AI
6
6
 
7
- Access 302 Eden AI models through Mastra's model router. Authentication is handled automatically using the `EDENAI_API_KEY` environment variable.
7
+ Access 303 Eden AI models through Mastra's model router. Authentication is handled automatically using the `EDENAI_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [Eden AI documentation](https://docs.edenai.co).
10
10
 
@@ -152,10 +152,11 @@ for await (const chunk of stream) {
152
152
  | `edenai/fireworks_ai/accounts/fireworks/models/gpt-oss-120b` | 131K | | | | | | $0.15 | $0.60 |
153
153
  | `edenai/fireworks_ai/accounts/fireworks/models/inkling` | 1.0M | | | | | | $1 | $4 |
154
154
  | `edenai/fireworks_ai/gpt-oss-120b` | 131K | | | | | | $0.15 | $0.60 |
155
- | `edenai/flexai/DeepSeek-V4-Flash-0731` | 1.0M | | | | | | $0.06 | $0.18 |
156
- | `edenai/flexai/DeepSeek-V4.1-Flash` | 1.0M | | | | | | $0.14 | $0.42 |
155
+ | `edenai/flexai/DeepSeek-V4-Flash-0731` | 1.0M | | | | | | $0.02 | $0.27 |
156
+ | `edenai/flexai/DeepSeek-V4.1-Flash` | 1.0M | | | | | | $0.09 | $0.18 |
157
157
  | `edenai/flexai/gpt-oss-120b` | 131K | | | | | | $0.03 | $0.17 |
158
158
  | `edenai/flexai/gpt-oss-20b` | 131K | | | | | | $0.02 | $0.10 |
159
+ | `edenai/flexai/Muse-Glimmer-30B` | 131K | | | | | | $0.35 | $2 |
159
160
  | `edenai/flexai/Step-3.7-Flash` | 262K | | | | | | $0.20 | $1 |
160
161
  | `edenai/google/deep-research-max-preview-04-2026` | 1.0M | | | | | | $2 | $12 |
161
162
  | `edenai/google/deep-research-preview-04-2026` | 1.0M | | | | | | $2 | $12 |
@@ -42,20 +42,20 @@ for await (const chunk of stream) {
42
42
  | `kilo/~anthropic/claude-haiku-latest` | 1.0M | | | | | | $0.10 | $0.50 |
43
43
  | `kilo/~anthropic/claude-opus-latest` | 1.0M | | | | | | $4 | $20 |
44
44
  | `kilo/~anthropic/claude-sonnet-latest` | 1.0M | | | | | | $2 | $10 |
45
- | `kilo/~deepseek/deepseek-flash-latest` | 1.0M | | | | | | $0.03 | $0.14 |
46
- | `kilo/~deepseek/deepseek-pro-latest` | 1.0M | | | | | | $0.22 | $0.66 |
47
- | `kilo/~deepseek/deepseek-v4-flash-latest` | 1.0M | | | | | | $0.02 | $0.64 |
45
+ | `kilo/~deepseek/deepseek-flash-latest` | 1.0M | | | | | | $0.03 | $1 |
46
+ | `kilo/~deepseek/deepseek-pro-latest` | 1.0M | | | | | | $0.25 | $5 |
47
+ | `kilo/~deepseek/deepseek-v4-flash-latest` | 1.0M | | | | | | $0.01 | $0.77 |
48
48
  | `kilo/~google/gemini-flash-latest` | 1.0M | | | | | | $0.75 | $4 |
49
49
  | `kilo/~google/gemini-pro-latest` | 1.0M | | | | | | $2 | $12 |
50
- | `kilo/~moonshotai/kimi-latest` | 1.0M | | | | | | $0.75 | $15 |
50
+ | `kilo/~moonshotai/kimi-latest` | 1.0M | | | | | | $0.72 | $24 |
51
51
  | `kilo/~openai/gpt-astra-latest` | 1.1M | | | | | | $10 | $50 |
52
52
  | `kilo/~openai/gpt-luna-latest` | 1.1M | | | | | | $0.10 | $0.50 |
53
53
  | `kilo/~openai/gpt-mini-latest` | 400K | | | | | | $0.75 | $5 |
54
54
  | `kilo/~openai/gpt-sol-latest` | 1.1M | | | | | | $2 | $10 |
55
55
  | `kilo/~openai/gpt-terra-latest` | 1.1M | | | | | | $2 | $12 |
56
56
  | `kilo/~x-ai/grok-latest` | 500K | | | | | | $2 | $6 |
57
- | `kilo/~z-ai/glm-flash-latest` | 1.0M | | | | | | $0.04 | $0.50 |
58
- | `kilo/~z-ai/glm-latest` | 1.0M | | | | | | $0.07 | $5 |
57
+ | `kilo/~z-ai/glm-flash-latest` | 1.0M | | | | | | $0.02 | $1 |
58
+ | `kilo/~z-ai/glm-latest` | 1.0M | | | | | | $0.06 | $5 |
59
59
  | `kilo/aion-labs/aion-2.0` | 131K | | | | | | $0.80 | $2 |
60
60
  | `kilo/aion-labs/aion-3.0` | 131K | | | | | | $3 | $6 |
61
61
  | `kilo/aion-labs/aion-3.0-mini` | 131K | | | | | | $0.70 | $1 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![LLM Gateway logo](https://models.dev/logos/llmgateway-providers.svg)LLM Gateway
6
6
 
7
- Access 446 LLM Gateway models through Mastra's model router. Authentication is handled automatically using the `LLMGATEWAY_API_KEY` environment variable.
7
+ Access 445 LLM Gateway models through Mastra's model router. Authentication is handled automatically using the `LLMGATEWAY_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [LLM Gateway documentation](https://llmgateway.io/docs).
10
10
 
@@ -202,7 +202,6 @@ for await (const chunk of stream) {
202
202
  | `llmgateway-providers/deepinfra/qwen3-vl-235b-a22b-instruct` | 262K | | | | | | $0.20 | $0.88 |
203
203
  | `llmgateway-providers/deepinfra/qwen3-vl-30b-a3b-instruct` | 262K | | | | | | $0.15 | $0.60 |
204
204
  | `llmgateway-providers/deepinfra/qwen3.5-9b` | 262K | | | | | | $0.10 | $0.15 |
205
- | `llmgateway-providers/deepinfra/qwen3.8-2.4t-a95b` | 262K | | | | | | $2 | $6 |
206
205
  | `llmgateway-providers/deepseek/deepseek-v4-pro` | 1.1M | | | | | | $0.43 | $0.87 |
207
206
  | `llmgateway-providers/deepseek/deepseek-v4.1-flash` | 1.1M | | | | | | $0.15 | $0.60 |
208
207
  | `llmgateway-providers/embercloud/glm-4.5` | 131K | | | | | | $0.60 | $2 |