@mastra/mcp-docs-server 1.2.19-alpha.3 → 1.2.19

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 (107) hide show
  1. package/.docs/docs/channels.md +28 -1
  2. package/.docs/docs/deployment/cloud-providers.md +1 -0
  3. package/.docs/docs/deployment/mastra-server.md +19 -0
  4. package/.docs/docs/deployment/overview.md +1 -0
  5. package/.docs/docs/deployment/workers.md +2 -2
  6. package/.docs/docs/evals/overview.md +33 -1
  7. package/.docs/docs/harness/durable-agents.md +1 -1
  8. package/.docs/docs/mastra-platform/api.md +54 -0
  9. package/.docs/docs/mastra-platform/deploy.md +101 -0
  10. package/.docs/docs/mastra-platform/observability.md +3 -1
  11. package/.docs/docs/mastra-platform/server.md +6 -11
  12. package/.docs/docs/mastra-platform/studio.md +8 -10
  13. package/.docs/docs/memory/semantic-recall.md +19 -0
  14. package/.docs/docs/observability/feedback.md +14 -0
  15. package/.docs/docs/observability/integrations/exporters/mastra-storage.md +19 -14
  16. package/.docs/docs/observability/metrics/overview.md +31 -44
  17. package/.docs/docs/sandbox/overview.md +43 -0
  18. package/.docs/docs/server/middleware.md +30 -0
  19. package/.docs/docs/server/server-adapters.md +109 -34
  20. package/.docs/docs/storage.md +2 -0
  21. package/.docs/docs/subagents.md +6 -6
  22. package/.docs/integrations/channels/github.md +56 -9
  23. package/.docs/integrations/channels/imessage.md +150 -8
  24. package/.docs/integrations/databases/elasticsearch.md +156 -0
  25. package/.docs/integrations/databases/libsql.md +16 -0
  26. package/.docs/integrations/databases/mongodb.md +1 -1
  27. package/.docs/integrations/databases/postgresql.md +26 -0
  28. package/.docs/integrations/databases/valkey.md +99 -0
  29. package/.docs/integrations/deploy/kubernetes-helm.md +332 -0
  30. package/.docs/integrations/deploy/kubernetes.md +1 -1
  31. package/.docs/integrations/deploy/render.md +47 -61
  32. package/.docs/integrations/sandboxes/daytona.md +52 -0
  33. package/.docs/integrations/sandboxes/e2b-desktop.md +128 -0
  34. package/.docs/integrations/sandboxes/e2b.md +6 -0
  35. package/.docs/integrations/sandboxes/vercel.md +2 -2
  36. package/.docs/integrations/tools/parallel.md +240 -0
  37. package/.docs/integrations.md +5 -0
  38. package/.docs/models/environment-variables.md +9 -0
  39. package/.docs/models/gateways/merge-gateway.md +2 -1
  40. package/.docs/models/gateways/netlify.md +12 -6
  41. package/.docs/models/gateways/openrouter.md +9 -11
  42. package/.docs/models/gateways/vercel.md +7 -6
  43. package/.docs/models/index.md +1 -1
  44. package/.docs/models/providers/agentrouter.md +17 -34
  45. package/.docs/models/providers/agnes.md +75 -0
  46. package/.docs/models/providers/aixy.md +73 -0
  47. package/.docs/models/providers/aki-io.md +14 -13
  48. package/.docs/models/providers/chutes.md +2 -2
  49. package/.docs/models/providers/cline-pass.md +4 -2
  50. package/.docs/models/providers/crof.md +3 -8
  51. package/.docs/models/providers/crossmodel.md +56 -55
  52. package/.docs/models/providers/deepseek.md +9 -10
  53. package/.docs/models/providers/digitalocean.md +1 -1
  54. package/.docs/models/providers/edenai.md +14 -13
  55. package/.docs/models/providers/evroc.md +3 -2
  56. package/.docs/models/providers/gmicloud.md +6 -4
  57. package/.docs/models/providers/huggingface.md +2 -1
  58. package/.docs/models/providers/hyper.md +6 -6
  59. package/.docs/models/providers/inceptron.md +2 -2
  60. package/.docs/models/providers/iteracompute.md +73 -0
  61. package/.docs/models/providers/kilo.md +31 -28
  62. package/.docs/models/providers/llmgateway-providers.md +20 -9
  63. package/.docs/models/providers/llmgateway.md +3 -5
  64. package/.docs/models/providers/llmtech.md +73 -0
  65. package/.docs/models/providers/nano-gpt.md +24 -13
  66. package/.docs/models/providers/neosmith.md +104 -0
  67. package/.docs/models/providers/nvidia.md +3 -1
  68. package/.docs/models/providers/ofox.md +114 -110
  69. package/.docs/models/providers/openai.md +2 -2
  70. package/.docs/models/providers/opencode-go.md +26 -24
  71. package/.docs/models/providers/opencode.md +1 -1
  72. package/.docs/models/providers/opper.md +112 -0
  73. package/.docs/models/providers/pendra.md +78 -0
  74. package/.docs/models/providers/requesty.md +1 -1
  75. package/.docs/models/providers/scaleway.md +2 -1
  76. package/.docs/models/providers/standardcompute.md +73 -0
  77. package/.docs/models/providers/vivgrid.md +2 -1
  78. package/.docs/models/providers/wandb.md +2 -1
  79. package/.docs/models/providers/zai.md +2 -1
  80. package/.docs/models/providers.md +9 -0
  81. package/.docs/reference/agents/channels.md +1 -1
  82. package/.docs/reference/ai-sdk/handle-chat-stream.md +11 -0
  83. package/.docs/reference/ai-sdk/with-sse-heartbeat.md +47 -0
  84. package/.docs/reference/cli/mastra.md +10 -4
  85. package/.docs/reference/client-js/observability.md +1 -1
  86. package/.docs/reference/index.md +5 -0
  87. package/.docs/reference/observability/feedback.md +4 -0
  88. package/.docs/reference/observability/metrics/automatic-metrics.md +1 -1
  89. package/.docs/reference/observability/metrics/queries.md +462 -0
  90. package/.docs/reference/pubsub/valkey-streams.md +84 -0
  91. package/.docs/reference/rag/vector-databases.md +4 -4
  92. package/.docs/reference/server/elysia-adapter.md +184 -0
  93. package/.docs/reference/server/express-adapter.md +6 -8
  94. package/.docs/reference/server/hono-adapter.md +19 -6
  95. package/.docs/reference/storage/turso.md +88 -0
  96. package/.docs/reference/streaming/ChunkType.md +29 -1
  97. package/.docs/reference/streaming/agents/stream.md +1 -3
  98. package/.docs/reference/tools/mcp-client.md +41 -9
  99. package/.docs/reference/vectors/mongodb.md +11 -11
  100. package/.docs/reference/vectors/pg.md +2 -0
  101. package/.docs/reference/workspace/local-sandbox.md +2 -0
  102. package/.docs/reference/workspace/platform-sandbox.md +3 -1
  103. package/.docs/reference/workspace/sandbox.md +143 -3
  104. package/.docs/reference/workspace/workspace-class.md +13 -1
  105. package/CHANGELOG.md +88 -0
  106. package/package.json +6 -6
  107. package/.docs/docs/observability/metrics/querying.md +0 -314
@@ -82,7 +82,7 @@ For example, a Slack adapter on an agent with the `your-agent` ID uses:
82
82
  /api/agents/your-agent/channels/slack/webhook
83
83
  ```
84
84
 
85
- Point the platform's webhook, event, or interactions URL to this path. Follow the guide for your platform or the [Chat SDK docs](https://chat-sdk.dev/adapters).
85
+ Point the platform's webhook, event, or interactions URL to this path. Follow the guide for your platform or the [Chat SDK docs](https://chat-sdk.dev/adapters). The webhook acknowledges the request before the agent finishes responding. See [Error handling and delivery](#error-handling-and-delivery) for what happens when verification or a handler fails.
86
86
 
87
87
  During local development, platform webhooks need a public URL to reach your local server. Use a tunnel like [cloudflared](https://github.com/cloudflare/cloudflared) or [ngrok](https://ngrok.com/) to expose your server, `localhost:4111` by default:
88
88
 
@@ -215,6 +215,32 @@ Add only JSON-serializable, non-sensitive values. Signal metadata may be stored
215
215
 
216
216
  Use `requestContext` for run-scoped configuration, such as credentials for a message that starts a run. Use `signalMetadata` for context that must stay attached to one message, including messages delivered to an active run.
217
217
 
218
+ ## Error handling and delivery
219
+
220
+ A channel webhook acknowledges the platform before the agent finishes, so a `200` response means "received", not "answered". Before that acknowledgment, the adapter rejects bad requests synchronously (`401` for failed verification, `400` for an unparseable body, `503` for transient state failures) and the platform redelivers on non-`2xx` responses per its own policy. After the `200`, the platform never retries and Mastra owns errors. The default handler catches agent-run failures and posts an error message to the thread (customize it with `formatError`, which defaults to `❌ Error: {message}`). A custom handler that throws is only logged by Chat SDK, so nothing is posted or retried. Catch failures in custom handlers yourself:
221
+
222
+ ```typescript
223
+ channels: {
224
+ adapters: {
225
+ slack: createSlackAdapter(),
226
+ },
227
+ handlers: {
228
+ onDirectMessage: async (thread, message, defaultHandler, ctx) => {
229
+ try {
230
+ ctx.signalMetadata.ticketId = await lookupTicket(message)
231
+ } catch (error) {
232
+ ctx.mastra?.getLogger().error('Ticket lookup failed', { error })
233
+ await thread.post('Something went wrong looking up your ticket. Try again in a moment.')
234
+ return
235
+ }
236
+ await defaultHandler(thread, message)
237
+ },
238
+ },
239
+ },
240
+ ```
241
+
242
+ Platform retries also mean the same event can arrive more than once. Adapters deduplicate redelivered events using channel state, so configure [storage](https://mastra.ai/docs/storage) to keep deduplication reliable across restarts. Deduplication is best effort, so keep side effects in custom handlers idempotent so a duplicate that slips through doesn't repeat work like creating a ticket.
243
+
218
244
  ## Multimodal content
219
245
 
220
246
  Models like Gemini can process images, video, and audio natively. Combine `inlineMedia` and `inlineLinks` to let users share rich content with your agent across platforms:
@@ -327,6 +353,7 @@ At the time of writing, Chat SDK lists adapters for:
327
353
  - Kapso
328
354
  - Lark / Feishu
329
355
  - Linear
356
+ - Linq
330
357
  - Liveblocks
331
358
  - Matrix
332
359
  - Mattermost
@@ -20,6 +20,7 @@ The following pages show you how to deploy Mastra to specific cloud providers.
20
20
  - [Digital Ocean](https://mastra.ai/integrations/deploy/digital-ocean)
21
21
  - [Inngest](https://mastra.ai/integrations/deploy/inngest)
22
22
  - [Kubernetes](https://mastra.ai/integrations/deploy/kubernetes)
23
+ - [Kubernetes (Helm)](https://mastra.ai/integrations/deploy/kubernetes-helm)
23
24
  - [Netlify](https://mastra.ai/integrations/deploy/netlify)
24
25
  - [Render](https://mastra.ai/integrations/deploy/render)
25
26
  - [Temporal](https://mastra.ai/integrations/deploy/temporal)
@@ -139,6 +139,24 @@ This list isn't exhaustive. To view all endpoints, run `mastra dev` and visit `h
139
139
 
140
140
  To add your own endpoints, see [Custom API Routes](https://mastra.ai/docs/server/custom-api-routes).
141
141
 
142
+ ## Graceful shutdown and rolling deploys
143
+
144
+ By default, the generated server handles `SIGINT` and `SIGTERM`. It stops accepting connections, waits up to [`server.drainTimeout`](https://mastra.ai/reference/configuration) for active requests and streams, then runs `mastra.shutdown()`. The drain timeout defaults to 5 seconds. A second signal terminates the process immediately. See [`server.handleShutdownSignals`](https://mastra.ai/reference/configuration) if you need to manage signals yourself.
145
+
146
+ Increase `drainTimeout` when your hosting platform's termination grace period can accommodate longer turns. Keep enough time after the drain for shutdown cleanup.
147
+
148
+ ```typescript
149
+ import { Mastra } from '@mastra/core/mastra'
150
+
151
+ export const mastra = new Mastra({
152
+ server: {
153
+ drainTimeout: 240_000,
154
+ },
155
+ })
156
+ ```
157
+
158
+ A plain `agent.stream()` call can't resume after its server process exits. If a stream ends without its expected terminal event, treat the turn as interrupted and let the client retry or reconcile it. Use [durable agents](https://mastra.ai/docs/harness/durable-agents) when turns must survive process replacement. [Crash recovery](https://mastra.ai/docs/harness/durable-agents) requires shared persistent run storage and idempotent tools. Replaying missed events after a restart also requires a shared persistent cache such as Redis because the default event cache is in-memory. Multi-replica recovery doesn't yet use a distributed lease.
159
+
142
160
  ## Troubleshooting
143
161
 
144
162
  ### Memory errors during build
@@ -154,4 +172,5 @@ NODE_OPTIONS="--max-old-space-size=4096" mastra build
154
172
  - [Server Overview](https://mastra.ai/docs/server/overview): Configure server behavior, middleware, and authentication
155
173
  - [Server Adapters](https://mastra.ai/docs/server/server-adapters): Use Express or Hono instead of `mastra build`
156
174
  - [Custom API Routes](https://mastra.ai/docs/server/custom-api-routes): Add custom HTTP endpoints
175
+ - [Durable Agents](https://mastra.ai/docs/harness/durable-agents): Persist agent runs so they survive process restarts
157
176
  - [Configuration Reference](https://mastra.ai/reference/configuration): Full configuration options
@@ -51,6 +51,7 @@ Use this option for auto-scaling, minimal infrastructure management, or when you
51
51
  - [Digital Ocean](https://mastra.ai/integrations/deploy/digital-ocean)
52
52
  - [Inngest](https://mastra.ai/integrations/deploy/inngest)
53
53
  - [Kubernetes](https://mastra.ai/integrations/deploy/kubernetes)
54
+ - [Kubernetes (Helm)](https://mastra.ai/integrations/deploy/kubernetes-helm)
54
55
  - [Netlify](https://mastra.ai/integrations/deploy/netlify)
55
56
  - [Render](https://mastra.ai/integrations/deploy/render)
56
57
  - [Temporal](https://mastra.ai/integrations/deploy/temporal)
@@ -29,7 +29,7 @@ Subscribes to workflow events on the [PubSub](https://mastra.ai/docs/server/pubs
29
29
 
30
30
  In a split deployment, the orchestration worker pulls events from a distributed PubSub backend and delegates step execution back to the API over HTTP. In-process, it runs steps directly.
31
31
 
32
- The orchestration worker requires a PubSub backend that supports pull mode (e.g., [`RedisStreamsPubSub`](https://mastra.ai/reference/pubsub/redis-streams) or [`GoogleCloudPubSub`](https://mastra.ai/reference/pubsub/google-cloud-pubsub)).
32
+ The orchestration worker requires a PubSub backend that supports pull mode (e.g., [`RedisStreamsPubSub`](https://mastra.ai/reference/pubsub/redis-streams), [`ValkeyStreamsPubSub`](https://mastra.ai/reference/pubsub/valkey-streams), or [`GoogleCloudPubSub`](https://mastra.ai/reference/pubsub/google-cloud-pubsub)).
33
33
 
34
34
  ### Scheduler worker
35
35
 
@@ -104,7 +104,7 @@ Any [supported storage backend](https://mastra.ai/reference/workers/overview) wo
104
104
 
105
105
  Run the same build artifact in multiple containers, each with a different [`MASTRA_WORKERS`](https://mastra.ai/reference/workers/overview) value to control which worker starts in each process.
106
106
 
107
- Split deployments require a distributed PubSub backend ([`RedisStreamsPubSub`](https://mastra.ai/reference/pubsub/redis-streams) or [`GoogleCloudPubSub`](https://mastra.ai/reference/pubsub/google-cloud-pubsub)), a shared [storage backend](https://mastra.ai/reference/workers/overview), and network connectivity between the orchestration worker and the API.
107
+ Split deployments require a distributed PubSub backend ([`RedisStreamsPubSub`](https://mastra.ai/reference/pubsub/redis-streams), [`ValkeyStreamsPubSub`](https://mastra.ai/reference/pubsub/valkey-streams), or [`GoogleCloudPubSub`](https://mastra.ai/reference/pubsub/google-cloud-pubsub)), a shared [storage backend](https://mastra.ai/reference/workers/overview), and network connectivity between the orchestration worker and the API.
108
108
 
109
109
  ### Select workers
110
110
 
@@ -115,13 +115,45 @@ For the step-level `scorers` API, see the [Step class reference](https://mastra.
115
115
 
116
116
  **Asynchronous execution**: Live evaluations run in the background without blocking your agent responses or workflow execution. Your AI systems remain responsive while live evaluations monitor them.
117
117
 
118
- **Sampling control**: The `sampling.rate` parameter (0-1) controls what percentage of outputs get scored:
118
+ **Sampling control**: The `sampling.rate` parameter (0-1) controls what fraction of outputs get scored:
119
119
 
120
120
  - `1.0`: Score every single response (100%)
121
121
  - `0.5`: Score half of all responses (50%)
122
122
  - `0.1`: Score 10% of responses
123
123
  - `0.0`: Disable scoring
124
124
 
125
+ Sampling is deterministic per trace: the decision is derived from the trace ID, not drawn at random. In practice:
126
+
127
+ - Scorers configured at the same rate score the same traces, so their scores are comparable on shared traffic.
128
+ - Re-running the same trace produces the same sampling decision, so sampled coverage is reproducible.
129
+
130
+ When a run has no trace (observability not configured), the decision is derived from the run ID instead. If [trace sampling](https://mastra.ai/docs/observability/tracing/overview) declined the trace, scorers skip that run entirely, so scores aren't created for traces that were never stored.
131
+
132
+ **Eligibility filters**: The optional `filter` parameter restricts which runs a scorer is eligible for, using a declarative predicate over the run's context. Filters are evaluated before sampling, so `sampling.rate` applies only to runs that match the filter:
133
+
134
+ ```typescript
135
+ export const myAgent = new Agent({
136
+ // ...
137
+ scorers: {
138
+ relevancy: {
139
+ scorer: createAnswerRelevancyScorer({ model: 'openai/gpt-5-mini' }),
140
+ filter: {
141
+ op: 'eq',
142
+ left: { path: 'requestContext.plan' },
143
+ right: { literal: 'enterprise' },
144
+ },
145
+ sampling: { type: 'ratio', rate: 0.1 },
146
+ },
147
+ },
148
+ })
149
+ ```
150
+
151
+ This scores 10% of enterprise-plan traffic and none of the rest. To score different segments at different rates, bind the same scorer twice with complementary filters.
152
+
153
+ Predicates can reference `requestContext.*`, `entity.*`, `entityType`, `source`, `threadId`, `resourceId`, and `projectId`. They support comparisons (`eq`, `ne`, `lt`, `lte`, `gt`, `gte`), membership (`in`, `notIn`), existence (`exists`, `notExists`), truthiness (`truthy`, `falsy`), and boolean composition (`and`, `or`, `not`). A filter that references an unknown root fails at agent construction rather than silently skipping scoring at runtime. Filters are plain JSON, so they're unaffected by durable agent state serialization.
154
+
155
+ Eligibility filters decide _whether a scorer runs_; to filter _which messages a scorer sees_ once it runs, use [`filterRun()`](https://mastra.ai/reference/evals/filter-run).
156
+
125
157
  **Automatic storage**: All scoring results are automatically stored in the `mastra_scorers` table in your configured database, allowing you to analyze performance trends over time.
126
158
 
127
159
  ## Score persistence
@@ -241,7 +241,7 @@ await durableAgent.resume(runId, { approved: true })
241
241
 
242
242
  ## Crash recovery
243
243
 
244
- If the server process crashes while a durable agent run is in progress, that run remains in `running` status in storage with no automatic retry. On the next server start you can re-drive these orphaned runs so they pick up where they left off.
244
+ If the server process crashes while a durable agent run is in progress, that run remains in `running` status in storage with no automatic retry. For orderly shutdowns such as rolling deploys, the generated server can also drain in-flight turns before exiting. See [graceful shutdown and rolling deploys](https://mastra.ai/docs/deployment/mastra-server). On the next server start you can re-drive these orphaned runs so they pick up where they left off.
245
245
 
246
246
  ### Automatic recovery
247
247
 
@@ -105,6 +105,60 @@ The root URL for the endpoints below is: `/v1/gateway`
105
105
  | GET | `/projects/:id/memory/threads/:threadId/observations/history` | Observation history (dashboard) |
106
106
  | GET | `/models` | List available models |
107
107
 
108
+ ## Observability feedback query API
109
+
110
+ The hosted feedback query API lists and analyzes feedback exported to Mastra Platform Observability. Because the API is unversioned, backwards compatibility isn't guaranteed. Rate limits, retention, and ingestion-to-query freshness aren't published contracts.
111
+
112
+ Use the root URL for your environment's data-residency region:
113
+
114
+ | Region | Root URL |
115
+ | -------------- | ------------------------------------------------------ |
116
+ | United States | `https://observability.mastra.ai/api/observability` |
117
+ | European Union | `https://observability.eu.mastra.ai/api/observability` |
118
+
119
+ Telemetry stays in its residency region. Querying the other region returns no records for the environment. See [Observability co-location](https://mastra.ai/docs/mastra-platform/regions) for the environment-to-region mapping.
120
+
121
+ ### Authentication and project scope
122
+
123
+ Every request requires a platform access token. Create one in [Mastra Platform](https://projects.mastra.ai), or use the token written to `.env` during Platform setup.
124
+
125
+ Include `X-Mastra-Project-Id` to limit results to one project. If you omit it, the query covers feedback in every project available to the token's organization.
126
+
127
+ ```bash
128
+ curl -sS "https://observability.mastra.ai/api/observability/feedback?page=0&perPage=20&feedbackType=rating" \
129
+ -H "Authorization: Bearer $MASTRA_PLATFORM_ACCESS_TOKEN" \
130
+ -H "X-Mastra-Project-Id: $MASTRA_PROJECT_ID" | jq
131
+ ```
132
+
133
+ Use an organization-scoped Platform access token. Gateway inference keys such as `mk_*` keys aren't accepted. Queries remain constrained to the token's organization even when you supply a project ID.
134
+
135
+ ### Endpoints
136
+
137
+ | Method | Endpoint | Description |
138
+ | ------ | ----------------------- | ---------------------------- |
139
+ | GET | `/feedback` | List feedback records |
140
+ | POST | `/feedback/aggregate` | Return one aggregate value |
141
+ | POST | `/feedback/breakdown` | Group feedback by dimensions |
142
+ | POST | `/feedback/timeseries` | Bucket feedback by interval |
143
+ | POST | `/feedback/percentiles` | Return percentile series |
144
+
145
+ The list endpoint accepts page-mode parameters such as `page`, `perPage`, `field`, and `direction`, plus feedback filters as query parameters. It also supports delta polling with `mode=delta`, `after`, and `limit`. Responses contain a `feedback` array and page or delta metadata.
146
+
147
+ Analytics endpoints accept the same JSON request shapes and return types as the [feedback reference](https://mastra.ai/reference/observability/feedback). Analytics operate only on numeric feedback values.
148
+
149
+ ```bash
150
+ curl -sS "https://observability.mastra.ai/api/observability/feedback/aggregate" \
151
+ -X POST \
152
+ -H "Authorization: Bearer $MASTRA_PLATFORM_ACCESS_TOKEN" \
153
+ -H "X-Mastra-Project-Id: $MASTRA_PROJECT_ID" \
154
+ -H "Content-Type: application/json" \
155
+ --data '{"feedbackType":"rating","feedbackSource":"user","aggregation":"avg"}' | jq
156
+ ```
157
+
158
+ The API returns `401` for invalid credentials, `403` for organization authorization failures, and `400` for malformed query arguments or JSON bodies.
159
+
160
+ Hosted observability doesn't provide a feedback creation route. Export feedback from the application as described in [Export feedback to Mastra Platform](https://mastra.ai/docs/observability/feedback).
161
+
108
162
  ## Gateway proxy endpoints
109
163
 
110
164
  Visit the [Gateway documentation](https://gateway.mastra.ai/docs) for more details.
@@ -67,6 +67,8 @@ A local `.env` file is optional. Environment variables stored on the platform ar
67
67
 
68
68
  > **Warning:** Set up [authentication](https://mastra.ai/docs/auth/overview) before exposing your endpoints publicly.
69
69
 
70
+ Each deploy replaces the running server process, which affects agent turns that are still streaming when the new version goes live. Because Mastra Platform doesn't currently provide a configurable or guaranteed termination grace period, don't rely on a raised `server.drainTimeout` for turns that may run longer than the default drain window. Use [durable agents](https://mastra.ai/docs/harness/durable-agents) with persistent storage and cache when turns must survive a deploy, or handle an interrupted stream in the client. See [graceful shutdown and rolling deploys](https://mastra.ai/docs/deployment/mastra-server) for the available strategies.
71
+
70
72
  The first deploy writes a `.mastra-project.json` file linking your directory to the platform project. Commit it so later deploys, CI runs, and [`mastra env`](https://mastra.ai/docs/mastra-platform/environments) commands target the same project without extra flags.
71
73
 
72
74
  ## Deploy to another environment
@@ -175,6 +177,105 @@ In CI, set `MASTRA_PROJECT_ID` and `MASTRA_API_TOKEN` and pass `--yes`:
175
177
  mastra deploy --env production --yes
176
178
  ```
177
179
 
180
+ ## Migrating from server and studio deploys
181
+
182
+ `mastra server deploy` and `mastra studio deploy` are deprecated. They'll be removed in the next major version. Once removed, both commands will fail and legacy-pipeline projects can't deploy a new build until they migrate.
183
+
184
+ Existing deployed services keep running. This only affects your ability to publish new deploys.
185
+
186
+ ### Who this affects
187
+
188
+ You are on the legacy pipeline if any of these are true:
189
+
190
+ - Your last deploy went out with `mastra server deploy` or `mastra studio deploy` and the deploy log printed a **Deprecated** banner.
191
+ - Your project's most recent successful deploy used `@mastra/core` older than `1.44`.
192
+ - Your organization hasn't been opted in to environment deploys.
193
+
194
+ The deploy log is the source of truth: the legacy pipeline prints a deprecation banner on every deploy.
195
+
196
+ ### Migrate
197
+
198
+ 1. Upgrade `@mastra/core` in your project. The environment pipeline calls `setStudio` on the built artifact, which requires `@mastra/core` `>= 1.44`.
199
+
200
+ **npm**:
201
+
202
+ ```bash
203
+ npm install @mastra/core@latest
204
+ ```
205
+
206
+ **pnpm**:
207
+
208
+ ```bash
209
+ pnpm add @mastra/core@latest
210
+ ```
211
+
212
+ **Yarn**:
213
+
214
+ ```bash
215
+ yarn add @mastra/core@latest
216
+ ```
217
+
218
+ **Bun**:
219
+
220
+ ```bash
221
+ bun add @mastra/core@latest
222
+ ```
223
+
224
+ If you are jumping several minor versions, paste the following into a coding agent (Claude Code, Cursor, etc.) to catch breaking changes in APIs you actually use:
225
+
226
+ ```text
227
+ Check whether this project is ready for the Mastra Platform environment pipeline.
228
+
229
+ 1. Find the installed version of `@mastra/core` (check package.json and the
230
+ lockfile for the version that actually resolved, not just the range).
231
+ 2. If it is >= 1.44.0, tell me I'm good — no further action needed.
232
+ 3. If it is < 1.44.0:
233
+ a. Fetch the `@mastra/core` changelog from
234
+ https://github.com/mastra-ai/mastra/blob/main/packages/core/CHANGELOG.md
235
+ and read every entry between my installed version and the latest release.
236
+ b. Scan my project (agents, workflows, tools, memory, storage, deployers,
237
+ telemetry — anywhere `@mastra/core`, `@mastra/*`, or `mastra` is imported)
238
+ and list every Mastra API surface I actually use.
239
+ c. For each used API, cross-reference the changelog and produce a table of:
240
+ API I use → breaking change → severity (breaks build / breaks runtime /
241
+ behavior change / none).
242
+ d. For each "breaks build" or "breaks runtime" row, implement the fix in my
243
+ codebase. For "behavior change" rows, leave a comment at the call site
244
+ explaining what changed so I can decide.
245
+ e. Bump `@mastra/core` (and any `@mastra/*` peers) to the latest matching
246
+ versions, then run typecheck and tests. Report anything still failing.
247
+ 4. Search my scripts, package.json, Dockerfiles, and CI config for
248
+ `mastra server deploy` and `mastra studio deploy`. Replace each
249
+ occurrence with `mastra deploy` — this is the unified command required
250
+ by the environment pipeline.
251
+
252
+ Do not restructure my CI, provision new infra, or change my environment
253
+ variable values — only the Mastra usage in my code and the deploy command
254
+ itself.
255
+ ```
256
+
257
+ 2. Replace the split command in your scripts and CI with the unified command:
258
+
259
+ ```diff
260
+ - mastra server deploy
261
+ - mastra studio deploy
262
+ + mastra deploy
263
+ ```
264
+
265
+ `mastra deploy` builds once and deploys both the server and the Studio UI shell for the target environment. Any recent `mastra` CLI supports it. If yours doesn't, upgrade with `npm install -g mastra@latest`.
266
+
267
+ 3. Deploy once. Your project is auto-adopted onto the environment pipeline and the `production` environment is created on first deploy. See [Environments](https://mastra.ai/docs/mastra-platform/environments) for the full model.
268
+
269
+ 4. Move any project-level environment variables to the environment that needs them, in the dashboard under **Environments → \<env> → Variables**. See [Environment variables](https://mastra.ai/docs/mastra-platform/environments).
270
+
271
+ ### FAQ
272
+
273
+ **My deploy fails with `MASTRA_CORE_TOO_OLD`.** The environment pipeline requires `@mastra/core` `>= 1.44`. Upgrade `@mastra/core` and redeploy.
274
+
275
+ **My organization isn't opted in yet.** Contact support. Opt-in will be automatic before the next major version.
276
+
277
+ **Can I roll back?** Yes. Environments retain deploy history and you can redeploy any prior successful artifact from the dashboard.
278
+
178
279
  ## Related
179
280
 
180
281
  - [Environments](https://mastra.ai/docs/mastra-platform/environments)
@@ -130,7 +130,7 @@ See [Mastra storage exporter](https://mastra.ai/docs/observability/integrations/
130
130
 
131
131
  ## View observability data
132
132
 
133
- Open your project in [Mastra Platform](https://projects.mastra.ai) to inspect exported traces, logs, metrics, scores, and feedback. A Studio or Server deployment isn't required.
133
+ Open your project in [Mastra Platform](https://projects.mastra.ai) to inspect exported traces, logs, metrics, and scores. A Studio or Server deployment isn't required. Query exported feedback through the hosted feedback API described below.
134
134
 
135
135
  Use a consistent `serviceName` to filter data from a specific application or deployment.
136
136
 
@@ -164,6 +164,8 @@ bun x mastra api trace list
164
164
 
165
165
  The CLI can infer platform credentials from your project environment. See the [`mastra api` CLI reference](https://mastra.ai/reference/cli/mastra) for available commands, filtering, pagination, credential resolution, and `curl` examples.
166
166
 
167
+ You can query exported feedback over HTTP. See the [observability feedback query API](https://mastra.ai/docs/mastra-platform/api) for its current status, regional endpoints, authentication, and project scoping.
168
+
167
169
  ## Next steps
168
170
 
169
171
  - 📹 [Mastra observability and Studio workshop](https://www.youtube.com/watch?v=dKO_a3RPra0)
@@ -6,8 +6,6 @@ Server on Mastra platform is a production deployment target that runs your Mastr
6
6
 
7
7
  You get a stable API endpoint with environment variable management and custom domain support, plus deploy history out of the box.
8
8
 
9
- > **Note:** `mastra server deploy` is the earlier split deploy path. New projects should use the unified [`mastra deploy`](https://mastra.ai/docs/mastra-platform/deploy) command, which adds preflight validation, environments, and CLI-managed databases.
10
-
11
9
  > **Note:** Server deploy provisions hosted storage automatically. If you override storage with [LibSQLStore](https://mastra.ai/integrations/databases/libsql) and a file URL, switch to a remotely hosted database because Mastra platform uses an ephemeral filesystem.
12
10
 
13
11
  ## Quickstart
@@ -43,7 +41,7 @@ You get a stable API endpoint with environment variable management and custom do
43
41
  3. Deploy your project:
44
42
 
45
43
  ```bash
46
- mastra server deploy
44
+ mastra deploy
47
45
  ```
48
46
 
49
47
  If you're not already authenticated, the CLI prompts you to log in. It stores your credentials locally and any subsequent CLI commands use these credentials.
@@ -157,7 +155,7 @@ Automate deployments from GitHub Actions, GitLab CI, or any CI provider. After y
157
155
  Pass `--yes` (or `-y`) to skip all confirmation prompts. Without it, the CLI waits for interactive input and your CI job hangs.
158
156
 
159
157
  ```bash
160
- mastra server deploy --yes
158
+ mastra deploy --yes
161
159
  ```
162
160
 
163
161
  ### GitHub Actions
@@ -184,15 +182,13 @@ jobs:
184
182
  - name: Install dependencies
185
183
  run: npm install
186
184
  - name: Deploy to Mastra platform
187
- run: npx mastra server deploy --yes
185
+ run: npx mastra deploy --yes
188
186
  env:
189
187
  MASTRA_API_TOKEN: ${{ secrets.MASTRA_API_TOKEN }}
190
188
  ```
191
189
 
192
190
  Adjust the `paths` filter and `working-directory` if your Mastra project is in a subdirectory (e.g. a monorepo).
193
191
 
194
- > **Note:** For Studio deploys, replace `mastra server deploy` with `mastra studio deploy`. The flags and environment variables are the same.
195
-
196
192
  ### GitLab CI
197
193
 
198
194
  The following pipeline deploys on pushes to `main`:
@@ -206,7 +202,7 @@ deploy:
206
202
  before_script:
207
203
  - npm install
208
204
  script:
209
- - npx mastra server deploy --yes
205
+ - npx mastra deploy --yes
210
206
  ```
211
207
 
212
208
  Add `MASTRA_API_TOKEN` as a CI/CD variable in **Settings → CI/CD → Variables**.
@@ -217,7 +213,7 @@ Any CI system that runs Node.js and shell commands works with Mastra:
217
213
 
218
214
  1. Install dependencies.
219
215
  2. Set `MASTRA_API_TOKEN` as an environment variable.
220
- 3. Run `mastra server deploy --yes` (or `mastra studio deploy --yes`).
216
+ 3. Run `mastra deploy --yes`.
221
217
 
222
218
  ### Verify the deploy
223
219
 
@@ -253,8 +249,7 @@ The CLI reads `organizationId` and `projectId` from `.mastra-project.json` by de
253
249
 
254
250
  ## Related
255
251
 
256
- - [`mastra server deploy`](https://mastra.ai/reference/cli/mastra)
252
+ - [`mastra deploy`](https://mastra.ai/reference/cli/mastra)
257
253
  - [`mastra server pause`](https://mastra.ai/reference/cli/mastra)
258
254
  - [`mastra server restart`](https://mastra.ai/reference/cli/mastra)
259
- - [`mastra studio deploy`](https://mastra.ai/reference/cli/mastra)
260
255
  - [`mastra auth tokens`](https://mastra.ai/reference/cli/mastra)
@@ -6,8 +6,6 @@ Studio on Mastra platform is a hosted visual workspace for testing agents and ru
6
6
 
7
7
  You can deploy Studio from the CLI as shown below, or link a GitHub repository for push-to-deploy. See the [GitHub integration](https://mastra.ai/docs/mastra-platform/github) for the repository-linked flow.
8
8
 
9
- > **Note:** `mastra studio deploy` is the earlier split deploy path. New projects should use the unified [`mastra deploy`](https://mastra.ai/docs/mastra-platform/deploy) command, which adds preflight validation, environments, and CLI-managed databases.
10
-
11
9
  ## Quickstart
12
10
 
13
11
  1. Follow the [get started guide](https://mastra.ai/docs) to create your first Mastra project.
@@ -41,7 +39,7 @@ You can deploy Studio from the CLI as shown below, or link a GitHub repository f
41
39
  3. Deploy Studio with a single command:
42
40
 
43
41
  ```bash
44
- mastra studio deploy
42
+ mastra deploy
45
43
  ```
46
44
 
47
45
  On a successful deploy, the CLI outputs the URL of your deployed Studio instance.
@@ -50,11 +48,11 @@ On your first deploy, the CLI prompts you to create a new project or select an e
50
48
 
51
49
  ## How deploy works
52
50
 
53
- The `mastra studio deploy` command builds your project and compiles `src/mastra/` into `.mastra/output`. It packages that output as an artifact ZIP, then uploads and deploys it to a cloud sandbox.
51
+ The `mastra deploy` command builds your project and compiles `src/mastra/` into `.mastra/output`. It packages that output as an artifact ZIP, then uploads and deploys it to a cloud sandbox.
54
52
 
55
53
  A deploy transitions through **queued → uploading → starting → running** or **failed** if something goes wrong. If a sandbox is already running for your project, the platform updates it in place with no downtime. Otherwise, it creates a fresh sandbox. Your instance URL is assigned per project slug and remains stable across deploys.
56
54
 
57
- See the [`mastra studio deploy` CLI reference](https://mastra.ai/reference/cli/mastra) for the full list of flags and CI/CD usage.
55
+ See the [`mastra deploy` CLI reference](https://mastra.ai/reference/cli/mastra) for the full list of flags and CI/CD usage.
58
56
 
59
57
  ## Environment files
60
58
 
@@ -63,17 +61,17 @@ A local env file is optional. When a `.env` or `.env.*` file is present in the p
63
61
  When multiple env files are present, the CLI prompts you to pick one. To select non-interactively, pass `--env-file`:
64
62
 
65
63
  ```bash
66
- mastra studio deploy --env-file .env.production --yes
64
+ mastra deploy --env-file .env.production --yes
67
65
  ```
68
66
 
69
- To run the same codebase across `production` and `staging`, use the unified [`mastra deploy --env`](https://mastra.ai/docs/mastra-platform/deploy) command instead. [Environments](https://mastra.ai/docs/mastra-platform/environments) replace the earlier pattern of one project per environment.
67
+ To run the same codebase across `production` and `staging`, use [`mastra deploy --env`](https://mastra.ai/docs/mastra-platform/deploy). See [Environments](https://mastra.ai/docs/mastra-platform/environments) for the full model.
70
68
 
71
69
  ## Create a new project non-interactively
72
70
 
73
- `mastra studio deploy` can create a project on first run. If `--project <name>` doesn't match an existing project, the CLI uses the value as the new project name and creates it after confirmation. Combined with `--yes`, this is fully scriptable:
71
+ `mastra deploy` can create a project on first run. If `--project <name>` doesn't match an existing project, the CLI uses the value as the new project name and creates it after confirmation. Combined with `--yes`, this is fully scriptable:
74
72
 
75
73
  ```bash
76
- mastra studio deploy --project "my-new-project" --yes
74
+ mastra deploy --project "my-new-project" --yes
77
75
  ```
78
76
 
79
77
  Use this from CI or AI coding agents instead of `mastra studio projects create`, which is interactive only.
@@ -84,4 +82,4 @@ To deploy Studio on your own infrastructure, see [Studio deployment](https://mas
84
82
 
85
83
  ## Related
86
84
 
87
- - [`mastra studio deploy`](https://mastra.ai/reference/cli/mastra)
85
+ - [`mastra deploy`](https://mastra.ai/reference/cli/mastra)
@@ -350,6 +350,25 @@ const agent = new Agent({
350
350
  })
351
351
  ```
352
352
 
353
+ FastEmbed also exposes the multilingual E5 model for non-English content. E5 is asymmetric, so it's exposed as two models: `multilingualE5LargePassage` for text you index and `multilingualE5LargeQuery` for search text.
354
+
355
+ ```ts
356
+ import { Memory } from '@mastra/memory'
357
+ import { Agent } from '@mastra/core/agent'
358
+ import { fastembed } from '@mastra/fastembed'
359
+
360
+ const agent = new Agent({
361
+ id: 'agent',
362
+ memory: new Memory({
363
+ embedder: fastembed.multilingualE5LargePassage,
364
+ }),
365
+ })
366
+ ```
367
+
368
+ Memory uses a single embedder for both storing and recalling messages, so pick one of the two models and use it consistently. Use the paired `multilingualE5LargeQuery` model only where you control both sides of the pipeline, such as a RAG workflow that indexes with the passage model and searches with the query model.
369
+
370
+ Multilingual E5 produces 1024-dimensional vectors. Your vector index must be created with matching dimensions, and E5 vectors can't be mixed with vectors from another embedder in the same index.
371
+
353
372
  ## PostgreSQL index optimization
354
373
 
355
374
  When using PostgreSQL as your vector store, you can optimize semantic recall performance by configuring the vector index. This is particularly important for large-scale deployments with thousands of messages.
@@ -33,6 +33,10 @@ await mastra.observability.addFeedback({
33
33
  })
34
34
  ```
35
35
 
36
+ When you pass only `traceId` and `spanId`, `addFeedback()` rehydrates the target from configured observability storage before emitting the feedback event. Configure [`MastraStorageExporter`](https://mastra.ai/docs/observability/integrations/exporters/mastra-storage) when feedback is added after the traced execution has finished. If the trace isn't available in storage, Mastra logs a warning and drops the feedback event.
37
+
38
+ During a live traced execution, you can pass its `correlationContext` to emit feedback without rehydrating the trace from storage. This path is useful when the active request collects feedback before its tracing context ends.
39
+
36
40
  ## Find the trace for a message
37
41
 
38
42
  Feedback is usually collected against a message a user has already read, so you need the `traceId` for that message. Assistant messages carry it in `content.metadata`, both in the stream result and when the message is recalled later from memory:
@@ -143,6 +147,16 @@ const ratingsOverTime = await observability!.getFeedbackTimeSeries({
143
147
 
144
148
  See the [feedback reference](https://mastra.ai/reference/observability/feedback) for all fields, filters, return types, and percentile query parameters.
145
149
 
150
+ The local runtime exposes the list route at `/api/observability/feedback` and analytics under its related paths. See the [HTTP routes table](https://mastra.ai/reference/observability/feedback). Mastra Platform provides a separate, unversioned hosted query API. See the [observability feedback query API](https://mastra.ai/docs/mastra-platform/api) for regional endpoints, authentication, and project scoping.
151
+
152
+ ## Export feedback to Mastra Platform
153
+
154
+ [`MastraPlatformExporter`](https://mastra.ai/reference/observability/tracing/exporters/mastra-platform-exporter) forwards emitted feedback events to Mastra Platform automatically because the hosted query API doesn't provide a creation route.
155
+
156
+ If your application adds feedback after an agent or workflow response using only its `traceId`, configure `MastraStorageExporter` alongside `MastraPlatformExporter`. The storage exporter keeps the trace available for `addFeedback()` to rehydrate, and the Platform exporter forwards the resulting feedback event. Exporting a trace to Platform doesn't make it available to the application's local storage.
157
+
158
+ See [Observability on Mastra Platform](https://mastra.ai/docs/mastra-platform/observability) for the combined exporter configuration.
159
+
146
160
  ## Export feedback to external platforms
147
161
 
148
162
  Feedback flows through the observability event bus, so exporters that support feedback forward it automatically. The [PostHog exporter](https://mastra.ai/reference/observability/tracing/exporters/posthog) sends feedback as native `$ai_feedback` events that appear on the linked trace in PostHog.
@@ -87,11 +87,12 @@ MastraStorageExporter automatically selects the optimal tracing strategy based o
87
87
 
88
88
  ### Available Strategies
89
89
 
90
- | Strategy | Description | Use Case |
91
- | ---------------------- | --------------------------------------------------------- | ----------------------------------- |
92
- | **realtime** | Process each event immediately | Development, debugging, low traffic |
93
- | **batch-with-updates** | Buffer events and batch write with full lifecycle support | Low volume Production |
94
- | **insert-only** | Only process completed spans, ignore updates | High volume Production |
90
+ | Strategy | Description | Use Case |
91
+ | ---------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------ |
92
+ | **realtime** | Process each event immediately | Development, debugging, low traffic |
93
+ | **batch-with-updates** | Buffer events and batch write with full lifecycle support | Low volume Production |
94
+ | **insert-only** | Only process completed spans, ignore updates | High volume Production |
95
+ | **event-sourced** | Write one row when a span starts and another when it ends, then collapse them on read | High volume Production, in-progress traces |
95
96
 
96
97
  ### Strategy Configuration
97
98
 
@@ -99,7 +100,7 @@ MastraStorageExporter automatically selects the optimal tracing strategy based o
99
100
  new MastraStorageExporter({
100
101
  strategy: 'auto', // Default - let storage provider decide
101
102
  // or explicitly set:
102
- // strategy: 'realtime' | 'batch-with-updates' | 'insert-only'
103
+ // strategy: 'realtime' | 'batch-with-updates' | 'insert-only' | 'event-sourced'
103
104
 
104
105
  // Batching configuration (applies to both batch-with-updates and insert-only)
105
106
  maxBatchSize: 1000, // Max spans per batch
@@ -116,14 +117,17 @@ If you set the strategy to `'auto'`, the `MastraStorageExporter` automatically s
116
117
 
117
118
  ### Providers with Observability Support
118
119
 
119
- | Storage Provider | Preferred Strategy | Supported Strategies | Recommended Use |
120
- | --------------------------------------------------------------------- | ------------------ | ------------------------------- | ------------------------------------- |
121
- | **[ClickHouse](https://mastra.ai/integrations/databases/clickhouse)** | insert-only | insert-only | Production (high-volume) |
122
- | **[PostgreSQL](https://mastra.ai/integrations/databases/postgresql)** | batch-with-updates | batch-with-updates, insert-only | Production (low volume) |
123
- | **[MSSQL](https://mastra.ai/integrations/databases/mssql)** | batch-with-updates | batch-with-updates, insert-only | Production (low volume) |
124
- | **[MongoDB](https://mastra.ai/integrations/databases/mongodb)** | batch-with-updates | batch-with-updates, insert-only | Production (low volume) |
125
- | **[OracleDB](https://mastra.ai/integrations/databases/oracledb)** | batch-with-updates | batch-with-updates, insert-only | Production (low volume) |
126
- | **[libSQL](https://mastra.ai/integrations/databases/libsql)** | batch-with-updates | batch-with-updates, insert-only | Default storage, good for development |
120
+ | Storage Provider | Preferred Strategy | Supported Strategies | Recommended Use |
121
+ | ----------------------------------------------------------------------------- | ------------------ | ------------------------------- | ------------------------------------- |
122
+ | **[ClickHouse](https://mastra.ai/integrations/databases/clickhouse)** | insert-only | insert-only | Production (high-volume) |
123
+ | **[PostgresStore](https://mastra.ai/integrations/databases/postgresql)** | batch-with-updates | batch-with-updates, insert-only | Production (low volume) |
124
+ | **[PostgresStoreVNext](https://mastra.ai/integrations/databases/postgresql)** | event-sourced | event-sourced | Production (high-volume) |
125
+ | **[MSSQL](https://mastra.ai/integrations/databases/mssql)** | batch-with-updates | batch-with-updates, insert-only | Production (low volume) |
126
+ | **[MongoDB](https://mastra.ai/integrations/databases/mongodb)** | batch-with-updates | batch-with-updates, insert-only | Production (low volume) |
127
+ | **[OracleDB](https://mastra.ai/integrations/databases/oracledb)** | batch-with-updates | batch-with-updates, insert-only | Production (low volume) |
128
+ | **[libSQL](https://mastra.ai/integrations/databases/libsql)** | batch-with-updates | batch-with-updates, insert-only | Default storage, good for development |
129
+
130
+ > **Note:** Under `insert-only`, only completed spans are persisted, and span start and update events are ignored. A trace therefore becomes visible in Studio only after its root span ends, and filtering traces by `status: 'running'` returns no results. `PostgresStoreVNext` uses `event-sourced` tracing instead, so in-progress traces remain visible while preserving append-only writes.
127
131
 
128
132
  ### Providers without Observability Support
129
133
 
@@ -141,6 +145,7 @@ The following storage providers **don't support** the observability domain. If y
141
145
  - **realtime**: Immediate visibility, best for debugging
142
146
  - **batch-with-updates**: 10-100x throughput improvement, full span lifecycle
143
147
  - **insert-only**: Additional 70% reduction in database operations, perfect for analytics
148
+ - **event-sourced**: Append-only like insert-only, but in-progress traces stay visible in Studio while a run executes
144
149
 
145
150
  ## Production recommendations
146
151