@mastra/mcp-docs-server 1.3.9-alpha.1 → 1.3.9-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.
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Channels
6
6
 
7
- [Channels](https://mastra.ai/docs/channels) let people talk to your agents from services such as Slack, Telegram, and Discord. Connect stores provider credentials on the platform and uses [`channels()`](https://mastra.ai/reference/connect/channels) to make those channels available in your Mastra application. It uses the same channel packages with platform-managed credentials, while vendor-side setup depends on the provider.
7
+ [Channels](https://mastra.ai/docs/channels) let people talk to your agents from services such as Slack, Telegram, Discord, and Microsoft Teams. Connect stores provider credentials on the platform and uses [`channels()`](https://mastra.ai/reference/connect/channels) to make those channels available in your Mastra application. It uses the same channel packages with platform-managed credentials, while vendor-side setup depends on the provider.
8
8
 
9
9
  Before you start, follow the [Connect setup](https://mastra.ai/docs/mastra-platform/connect/overview) to install the package and configure your platform project.
10
10
 
@@ -29,7 +29,7 @@ The channels available to your app are configured at startup, while their creden
29
29
 
30
30
  ## Connect a provider
31
31
 
32
- The following steps cover Slack, Discord, and Telegram. Start your Mastra application before completing the agent connection in Studio.
32
+ The following steps cover Slack, Discord, Telegram, and Microsoft Teams. Start your Mastra application before completing the agent connection in Studio.
33
33
 
34
34
  For webhook delivery and OAuth callbacks, your server needs a public URL reachable by the provider. Mastra platform supplies this URL. When hosting elsewhere, set `MASTRA_SERVER_URL` to your public server URL. Use a public HTTPS tunnel for local webhook development.
35
35
 
@@ -72,6 +72,18 @@ Telegram uses a bot token from BotFather. Before connecting an agent, set `MASTR
72
72
 
73
73
  For local development without a public webhook URL, the [Telegram provider reference](https://mastra.ai/reference/channels/telegram-provider) describes polling mode.
74
74
 
75
+ ### Microsoft Teams
76
+
77
+ Teams uses a Microsoft work or school account authorized with OAuth. The same `microsoft-teams` connection provides both the channel and Teams [tools](https://mastra.ai/docs/mastra-platform/connect/tools). When an agent connects, Mastra registers a bot for it in the Teams Developer Portal, so no Azure app registration is needed on your side.
78
+
79
+ The bot credential is stored encrypted at rest. Set `MASTRA_ENCRYPTION_KEY` to use a dedicated key; without it, `channels()` derives a key from the platform access token and logs a warning. Rotating the platform access token then makes stored bot credentials unreadable, disconnect and reconnect the channel to re-provision.
80
+
81
+ 1. Run `mastra connect add microsoft-teams` and sign in with a Microsoft work or school account. Some of the requested permissions require admin consent, so the first connection in a tenant needs a Microsoft Entra administrator.
82
+ 2. Connect the channel to an agent in Studio. Mastra creates a single-tenant bot registration for the agent and returns a link to the [Teams Developer Portal](https://dev.teams.microsoft.com/bots).
83
+ 3. Open the link, package the bot into a Teams app in the Developer Portal, and add the app to Teams.
84
+
85
+ Disconnecting the agent deletes the bot registration and its Entra application.
86
+
75
87
  ## Configure available channels
76
88
 
77
89
  Use `providers` to select the channels your app exposes:
@@ -9,7 +9,7 @@
9
9
  Connect manages connections to services such as GitHub, Slack, and Linear in your [Mastra platform](https://mastra.ai/docs/mastra-platform/overview) project. The `@mastra/connect` package makes those connections available to your application as tools, channels, or credentials.
10
10
 
11
11
  - **Tools** let agents call a provider's API. Connect supplies ready-made tools and sends their requests through a platform proxy that adds credentials and refreshes OAuth tokens. See [Tools](https://mastra.ai/docs/mastra-platform/connect/tools).
12
- - **Channels** let people talk to agents through Slack, Telegram, or Discord. Connect supplies credentials to Mastra's channel providers. See [Channels](https://mastra.ai/docs/mastra-platform/connect/channels).
12
+ - **Channels** let people talk to agents through Slack, Telegram, Discord, or Microsoft Teams. Connect supplies credentials to Mastra's channel providers. See [Channels](https://mastra.ai/docs/mastra-platform/connect/channels).
13
13
  - **Raw credentials** let your code call a provider's SDK directly when the tools don't cover what you need. See [`credential()`](https://mastra.ai/reference/connect/credential).
14
14
 
15
15
  ## When to use Connect
@@ -25,6 +25,7 @@ This directory covers the generated toolsets and channel setup documented here,
25
25
  | `incident-io` | ![](https://app.nango.dev/images/template-logos/incident-io.svg) incident.io | [Tools](https://mastra.ai/reference/connect/providers) |
26
26
  | `jira` | ![](https://cdn.simpleicons.org/jira?viewbox=auto\&size=28) Jira | [Tools](https://mastra.ai/reference/connect/providers) |
27
27
  | `linear` | ![](https://cdn.simpleicons.org/linear?viewbox=auto\&size=28) Linear | [Tools](https://mastra.ai/reference/connect/providers) |
28
+ | `microsoft-teams` | ![](https://cdn.simpleicons.org/microsoftteams?viewbox=auto\&size=28) Microsoft Teams | [Tools](https://mastra.ai/reference/connect/providers), [Channels](https://mastra.ai/docs/mastra-platform/connect/channels) |
28
29
  | `notion` | ![](https://cdn.simpleicons.org/notion?viewbox=auto\&size=28) Notion | [Tools](https://mastra.ai/reference/connect/providers) |
29
30
  | `openai` | ![](https://svgl.app/library/openai.svg) OpenAI | [Tools](https://mastra.ai/reference/connect/providers) |
30
31
  | `posthog` | ![](https://cdn.simpleicons.org/posthog?viewbox=auto\&size=28) PostHog | [Tools](https://mastra.ai/reference/connect/providers) |
@@ -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 410 models through Mastra's model router.
7
+ Vercel aggregates models from multiple providers with enhanced features like rate limiting and failover. Access 408 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
 
@@ -94,7 +94,6 @@ ANTHROPIC_API_KEY=ant-...
94
94
  | `anthropic/claude-opus-5-fast` |
95
95
  | `anthropic/claude-opus-5.5` |
96
96
  | `anthropic/claude-opus-5.5-fast` |
97
- | `anthropic/claude-sonnet-4` |
98
97
  | `anthropic/claude-sonnet-4.5` |
99
98
  | `anthropic/claude-sonnet-4.6` |
100
99
  | `anthropic/claude-sonnet-5` |
@@ -360,7 +359,6 @@ ANTHROPIC_API_KEY=ant-...
360
359
  | `poolside/laguna-s-2.1` |
361
360
  | `poolside/laguna-s-2.1-free` |
362
361
  | `prodia/flux-fast-schnell` |
363
- | `quiverai/arrow-1.1` |
364
362
  | `quiverai/arrow-2` |
365
363
  | `quiverai/arrow-2-telos` |
366
364
  | `recraft/recraft-v2` |
@@ -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 8232 models from 218 providers through a single API.
7
+ Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to 8229 models from 218 providers through a single API.
8
8
 
9
9
  ## Features
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![302.AI logo](https://models.dev/logos/302ai.svg)302.AI
6
6
 
7
- Access 124 302.AI models through Mastra's model router. Authentication is handled automatically using the `302AI_API_KEY` environment variable.
7
+ Access 125 302.AI models through Mastra's model router. Authentication is handled automatically using the `302AI_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [302.AI documentation](https://doc.302.ai).
10
10
 
@@ -84,6 +84,7 @@ for await (const chunk of stream) {
84
84
  | `302ai/gemini-3.6-flash` | 1.0M | | | | | | $2 | $8 |
85
85
  | `302ai/gemini-3.7-flash` | 1.0M | | | | | | $0.75 | $4 |
86
86
  | `302ai/gemini-3.8-flash` | 1.0M | | | | | | $0.75 | $4 |
87
+ | `302ai/gemini-4-argon` | 1.0M | | | | | | $4 | $10 |
87
88
  | `302ai/glm-4.5` | 131K | | | | | | $0.29 | $1 |
88
89
  | `302ai/glm-4.5v` | 64K | | | | | | $0.29 | $0.86 |
89
90
  | `302ai/glm-4.6` | 205K | | | | | | $0.29 | $1 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Cortecs logo](https://models.dev/logos/cortecs.svg)Cortecs
6
6
 
7
- Access 107 Cortecs models through Mastra's model router. Authentication is handled automatically using the `CORTECS_API_KEY` environment variable.
7
+ Access 106 Cortecs models through Mastra's model router. Authentication is handled automatically using the `CORTECS_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [Cortecs documentation](https://cortecs.ai).
10
10
 
@@ -99,7 +99,6 @@ for await (const chunk of stream) {
99
99
  | `cortecs/kimi-k2.6` | 256K | | | | | | $0.47 | $3 |
100
100
  | `cortecs/kimi-k2.7-code` | 262K | | | | | | $0.66 | $3 |
101
101
  | `cortecs/kimi-k3` | 1.0M | | | | | | $3 | $15 |
102
- | `cortecs/llama-3.1-8b-instruct` | 128K | | | | | | $0.17 | $0.17 |
103
102
  | `cortecs/llama-3.3-70b-instruct` | 131K | | | | | | $0.72 | $0.72 |
104
103
  | `cortecs/minicpm-v-4.5` | 32K | | | | | | $0.65 | $1 |
105
104
  | `cortecs/minimax-m2` | 400K | | | | | | $0.35 | $1 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Eden AI logo](https://models.dev/logos/edenai.svg)Eden AI
6
6
 
7
- Access 329 Eden AI models through Mastra's model router. Authentication is handled automatically using the `EDENAI_API_KEY` environment variable.
7
+ Access 331 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
 
@@ -158,6 +158,7 @@ for await (const chunk of stream) {
158
158
  | `edenai/deepseek/deepseek-v4-pro` | 1.0M | | | | | | $0.66 | $2 |
159
159
  | `edenai/fireworks_ai/accounts/fireworks/models/gpt-oss-120b` | 131K | | | | | | $0.15 | $0.60 |
160
160
  | `edenai/fireworks_ai/accounts/fireworks/models/inkling` | 1.0M | | | | | | $1 | $4 |
161
+ | `edenai/fireworks_ai/accounts/fireworks/models/muse-spark-open` | 1.0M | | | | | | $1 | $4 |
161
162
  | `edenai/fireworks_ai/gpt-oss-120b` | 131K | | | | | | $0.15 | $0.60 |
162
163
  | `edenai/flexai/DeepSeek-V4-Flash-0731` | 1.0M | | | | | | $0.12 | $0.24 |
163
164
  | `edenai/flexai/DeepSeek-V4-Flash-0731@eu` | 1.0M | | | | | | $0.12 | $0.24 |
@@ -234,6 +235,7 @@ for await (const chunk of stream) {
234
235
  | `edenai/nebius/deepseek-ai/DeepSeek-V4-Pro-0813` | 979K | | | | | | $1 | $4 |
235
236
  | `edenai/nebius/deepseek-ai/DeepSeek-V4.1-Flash` | 1.0M | | | | | | $0.30 | $1 |
236
237
  | `edenai/nebius/google/gemma-3-27b-it` | 110K | | | | | | $0.10 | $0.30 |
238
+ | `edenai/nebius/meta-models/muse-spark-open` | 1.0M | | | | | | $1 | $4 |
237
239
  | `edenai/nebius/nvidia/nemotron-3-super-120b-a12b` | 262K | | | | | | $0.30 | $0.90 |
238
240
  | `edenai/nebius/nvidia/Nemotron-3-Ultra-550b-a55b` | 1.0M | | | | | | $1 | $3 |
239
241
  | `edenai/nebius/openai/gpt-oss-120b` | 131K | | | | | | $0.15 | $0.60 |
@@ -39,10 +39,10 @@ for await (const chunk of stream) {
39
39
  | Model | Context | Tools | Reasoning | Image | Audio | Video | Input $/1M | Output $/1M |
40
40
  | ----------------------------- | ------- | ----- | --------- | ----- | ----- | ----- | ---------- | ----------- |
41
41
  | `engy/deepseek-v4-flash-0731` | 1.0M | | | | | | $0.04 | $0.09 |
42
- | `engy/deepseek-v4.1-flash` | 328K | | | | | | $0.04 | $0.08 |
42
+ | `engy/deepseek-v4.1-flash` | 1.0M | | | | | | $0.04 | $0.08 |
43
43
  | `engy/glm-5.2` | 262K | | | | | | $0.68 | $2 |
44
44
  | `engy/glm-5.3` | 328K | | | | | | $0.98 | $3 |
45
- | `engy/glm-5.3-flash` | 262K | | | | | | $0.14 | $0.45 |
45
+ | `engy/glm-5.3-flash` | 328K | | | | | | $0.14 | $0.45 |
46
46
  | `engy/kimi-k3` | 1.1M | | | | | | $2 | $10 |
47
47
  | `engy/qwen3.6-35b-a3b` | 208K | | | | | | $0.04 | $0.30 |
48
48
  | `engy/qwen3.8-27b` | 1.0M | | | | | | $0.04 | $0.32 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Kilo Gateway logo](https://models.dev/logos/kilo.svg)Kilo Gateway
6
6
 
7
- Access 392 Kilo Gateway models through Mastra's model router. Authentication is handled automatically using the `KILO_API_KEY` environment variable.
7
+ Access 393 Kilo Gateway models through Mastra's model router. Authentication is handled automatically using the `KILO_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [Kilo Gateway documentation](https://kilo.ai).
10
10
 
@@ -42,12 +42,12 @@ 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.01 | $0.72 |
46
- | `kilo/~deepseek/deepseek-pro-latest` | 1.0M | | | | | | $0.13 | $8 |
47
- | `kilo/~deepseek/deepseek-v4-flash-latest` | 1.0M | | | | | | $0.01 | $0.58 |
45
+ | `kilo/~deepseek/deepseek-flash-latest` | 1.0M | | | | | | $0.04 | $0.68 |
46
+ | `kilo/~deepseek/deepseek-pro-latest` | 1.0M | | | | | | $0.25 | $5 |
47
+ | `kilo/~deepseek/deepseek-v4-flash-latest` | 1.0M | | | | | | $0.01 | $1 |
48
48
  | `kilo/~google/gemini-flash-latest` | 1.0M | | | | | | $0.75 | $4 |
49
49
  | `kilo/~google/gemini-pro-latest` | 1.0M | | | | | | $2 | $10 |
50
- | `kilo/~moonshotai/kimi-latest` | 1.0M | | | | | | $0.32 | $24 |
50
+ | `kilo/~moonshotai/kimi-latest` | 1.0M | | | | | | $0.29 | $28 |
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 |
@@ -55,7 +55,7 @@ for await (const chunk of stream) {
55
55
  | `kilo/~openai/gpt-terra-latest` | 1.1M | | | | | | $2 | $12 |
56
56
  | `kilo/~unbiased/pareto-latest` | 262K | | | | | | $3 | $8 |
57
57
  | `kilo/~x-ai/grok-latest` | 500K | | | | | | $2 | $6 |
58
- | `kilo/~z-ai/glm-flash-latest` | 1.0M | | | | | | $0.03 | $0.68 |
58
+ | `kilo/~z-ai/glm-flash-latest` | 1.0M | | | | | | $0.01 | $0.82 |
59
59
  | `kilo/~z-ai/glm-latest` | 1.0M | | | | | | $0.06 | $4 |
60
60
  | `kilo/aion-labs/aion-2.0` | 131K | | | | | | $0.80 | $2 |
61
61
  | `kilo/aion-labs/aion-3.0` | 131K | | | | | | $3 | $6 |
@@ -99,7 +99,7 @@ for await (const chunk of stream) {
99
99
  | `kilo/cohere/command-r-plus-08-2024` | 128K | | | | | | $3 | $10 |
100
100
  | `kilo/cohere/command-r7b-12-2024` | 128K | | | | | | $0.04 | $0.15 |
101
101
  | `kilo/cohere/north-mini-code:free` | 256K | | | | | | — | — |
102
- | `kilo/deepseek/deepseek-chat` | 164K | | | | | | $0.32 | $0.89 |
102
+ | `kilo/deepseek/deepseek-chat` | 128K | | | | | | $0.26 | $1 |
103
103
  | `kilo/deepseek/deepseek-chat-v3-0324` | 128K | | | | | | $0.29 | $1 |
104
104
  | `kilo/deepseek/deepseek-chat-v3.1` | 164K | | | | | | $0.25 | $0.95 |
105
105
  | `kilo/deepseek/deepseek-r1` | 64K | | | | | | $0.70 | $3 |
@@ -138,7 +138,7 @@ for await (const chunk of stream) {
138
138
  | `kilo/google/gemini-4-argon` | 1.0M | | | | | | $2 | $10 |
139
139
  | `kilo/google/gemini-nano-banana-2.1` | 66K | | | | | | $2 | $8 |
140
140
  | `kilo/google/gemma-2-27b-it` | 8K | | | | | | $0.65 | $0.65 |
141
- | `kilo/google/gemma-3-12b-it` | 131K | | | | | | $0.05 | $0.15 |
141
+ | `kilo/google/gemma-3-12b-it` | 131K | | | | | | $0.04 | $0.12 |
142
142
  | `kilo/google/gemma-3-27b-it` | 131K | | | | | | $0.08 | $0.16 |
143
143
  | `kilo/google/gemma-3-4b-it` | 131K | | | | | | $0.04 | $0.05 |
144
144
  | `kilo/google/gemma-4-26b-a4b-it` | 262K | | | | | | $0.04 | $0.22 |
@@ -170,8 +170,8 @@ for await (const chunk of stream) {
170
170
  | `kilo/meta-llama/llama-3.2-3b-instruct` | 131K | | | | | | $0.05 | $0.33 |
171
171
  | `kilo/meta-llama/llama-3.3-70b-instruct` | 131K | | | | | | $0.10 | $0.32 |
172
172
  | `kilo/meta-llama/llama-4-maverick` | 128K | | | | | | $0.19 | $0.65 |
173
- | `kilo/meta-llama/llama-4-scout` | 131K | | | | | | $0.10 | $0.30 |
174
- | `kilo/meta-llama/llama-guard-4-12b` | 164K | | | | | | $0.18 | $0.18 |
173
+ | `kilo/meta-llama/llama-4-scout` | 131K | | | | | | $0.08 | $0.24 |
174
+ | `kilo/meta-llama/llama-guard-4-12b` | 164K | | | | | | $0.14 | $0.14 |
175
175
  | `kilo/meta/muse-glimmer-30b` | 131K | | | | | | $0.30 | $1 |
176
176
  | `kilo/meta/muse-spark-1.1` | 1.0M | | | | | | $1 | $4 |
177
177
  | `kilo/meta/muse-spark-1.2` | 1.0M | | | | | | $1 | $4 |
@@ -180,7 +180,7 @@ for await (const chunk of stream) {
180
180
  | `kilo/meta/muse-spark-1.3-contributor` | 1.0M | | | | | | $0.10 | $0.20 |
181
181
  | `kilo/meta/muse-spark-open` | 1.0M | | | | | | $1 | $4 |
182
182
  | `kilo/meta/muse-wonder` | 1.0M | | | | | | $4 | $20 |
183
- | `kilo/microsoft/phi-4` | 16K | | | | | | $0.07 | $0.14 |
183
+ | `kilo/microsoft/phi-4` | 16K | | | | | | $0.06 | $0.11 |
184
184
  | `kilo/microsoft/wizardlm-2-8x22b` | 66K | | | | | | $0.62 | $0.62 |
185
185
  | `kilo/minimax/minimax-01` | 1.0M | | | | | | $0.20 | $1 |
186
186
  | `kilo/minimax/minimax-m1` | 1.0M | | | | | | $0.40 | $2 |
@@ -230,7 +230,7 @@ for await (const chunk of stream) {
230
230
  | `kilo/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free` | 256K | | | | | | — | — |
231
231
  | `kilo/nvidia/nemotron-3-super-120b-a12b` | 262K | | | | | | $0.08 | $0.45 |
232
232
  | `kilo/nvidia/nemotron-3-super-120b-a12b:free` | 262K | | | | | | — | — |
233
- | `kilo/nvidia/nemotron-3-ultra-550b-a55b` | 203K | | | | | | $0.50 | $2 |
233
+ | `kilo/nvidia/nemotron-3-ultra-550b-a55b` | 203K | | | | | | $0.40 | $2 |
234
234
  | `kilo/nvidia/nemotron-3-ultra-550b-a55b:free` | 1.0M | | | | | | — | — |
235
235
  | `kilo/nvidia/nemotron-3.5-content-safety` | 131K | | | | | | $0.20 | $0.20 |
236
236
  | `kilo/nvidia/nemotron-3.5-content-safety:free` | 128K | | | | | | — | — |
@@ -334,7 +334,7 @@ for await (const chunk of stream) {
334
334
  | `kilo/qwen/qwen3-coder-30b-a3b-instruct` | 262K | | | | | | $0.07 | $0.28 |
335
335
  | `kilo/qwen/qwen3-coder-flash` | 1.0M | | | | | | $0.20 | $0.97 |
336
336
  | `kilo/qwen/qwen3-coder-next` | 262K | | | | | | $0.12 | $0.80 |
337
- | `kilo/qwen/qwen3-next-80b-a3b-instruct` | 262K | | | | | | $0.10 | $1 |
337
+ | `kilo/qwen/qwen3-next-80b-a3b-instruct` | 262K | | | | | | $0.09 | $1 |
338
338
  | `kilo/qwen/qwen3-next-80b-a3b-thinking` | 262K | | | | | | $0.15 | $1 |
339
339
  | `kilo/qwen/qwen3-vl-235b-a22b-instruct` | 131K | | | | | | $0.21 | $2 |
340
340
  | `kilo/qwen/qwen3-vl-30b-a3b-instruct` | 262K | | | | | | $0.15 | $0.60 |
@@ -374,6 +374,7 @@ for await (const chunk of stream) {
374
374
  | `kilo/sao10k/l3.3-euryale-70b` | 131K | | | | | | $0.65 | $0.75 |
375
375
  | `kilo/scaledown/extract` | 1.0M | | | | | | $0.05 | — |
376
376
  | `kilo/scaledown/summarize` | 1.0M | | | | | | $0.05 | — |
377
+ | `kilo/stealth/cat-jam` | 1.0M | | | | | | — | — |
377
378
  | `kilo/stealth/claude-opus-4.6` | 1.0M | | | | | | $4 | $20 |
378
379
  | `kilo/stealth/claude-opus-4.7` | 1.0M | | | | | | $4 | $20 |
379
380
  | `kilo/stealth/claude-opus-4.8` | 1.0M | | | | | | $4 | $20 |
@@ -387,9 +388,9 @@ for await (const chunk of stream) {
387
388
  | `kilo/tencent/hy-mt2-1.8b` | 8K | | | | | | $0.04 | $0.18 |
388
389
  | `kilo/tencent/hy-mt2-30b-a3b` | 8K | | | | | | $0.07 | $0.29 |
389
390
  | `kilo/tencent/hy-mt2-7b` | 8K | | | | | | $0.07 | $0.29 |
390
- | `kilo/tencent/hy3` | 262K | | | | | | $0.08 | $0.33 |
391
+ | `kilo/tencent/hy3` | 262K | | | | | | $0.13 | $0.53 |
391
392
  | `kilo/tencent/hy3-preview` | 262K | | | | | | $0.18 | $0.60 |
392
- | `kilo/tencent/hy4-preview` | 1.0M | | | | | | $0.75 | $2 |
393
+ | `kilo/tencent/hy4-preview` | 1.0M | | | | | | $0.80 | $2 |
393
394
  | `kilo/thedrummer/cydonia-24b-v4.1` | 131K | | | | | | $0.30 | $0.50 |
394
395
  | `kilo/thedrummer/skyfall-36b-v2` | 33K | | | | | | $0.55 | $0.80 |
395
396
  | `kilo/thedrummer/unslopnemo-12b` | 1.0M | | | | | | $0.40 | $0.40 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![LLM Gateway logo](https://models.dev/logos/llmgateway-providers.svg)LLM Gateway
6
6
 
7
- Access 439 LLM Gateway models through Mastra's model router. Authentication is handled automatically using the `LLMGATEWAY_API_KEY` environment variable.
7
+ Access 433 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
 
@@ -223,9 +223,6 @@ for await (const chunk of stream) {
223
223
  | `llmgateway-providers/fireworks/kimi-k3` | 1.0M | | | | | | $3 | $15 |
224
224
  | `llmgateway-providers/fireworks/kimi-k3-fast` | 1.0M | | | | | | $5 | $23 |
225
225
  | `llmgateway-providers/gonka24/minimax-m2.7` | 205K | | | | | | $0.08 | $0.32 |
226
- | `llmgateway-providers/google-ai-studio/gemini-2.5-flash` | 1.0M | | | | | | $0.30 | $3 |
227
- | `llmgateway-providers/google-ai-studio/gemini-2.5-flash-lite` | 1.0M | | | | | | $0.10 | $0.40 |
228
- | `llmgateway-providers/google-ai-studio/gemini-2.5-pro` | 1.0M | | | | | | $1 | $10 |
229
226
  | `llmgateway-providers/google-ai-studio/gemini-3-flash-preview` | 1.0M | | | | | | $0.50 | $3 |
230
227
  | `llmgateway-providers/google-ai-studio/gemini-3.1-flash-lite` | 1.0M | | | | | | $0.25 | $2 |
231
228
  | `llmgateway-providers/google-ai-studio/gemini-3.1-pro-preview` | 1.0M | | | | | | $2 | $12 |
@@ -236,9 +233,6 @@ for await (const chunk of stream) {
236
233
  | `llmgateway-providers/google-ai-studio/gemini-3.8-flash` | 1.0M | | | | | | $0.75 | $4 |
237
234
  | `llmgateway-providers/google-ai-studio/gemini-4-argon` | 1.0M | | | | | | $4 | $20 |
238
235
  | `llmgateway-providers/google-ai-studio/gemini-pro-latest` | 1.0M | | | | | | $2 | $12 |
239
- | `llmgateway-providers/google-vertex/gemini-2.5-flash` | 1.0M | | | | | | $0.30 | $3 |
240
- | `llmgateway-providers/google-vertex/gemini-2.5-flash-lite` | 1.0M | | | | | | $0.10 | $0.40 |
241
- | `llmgateway-providers/google-vertex/gemini-2.5-pro` | 1.0M | | | | | | $1 | $10 |
242
236
  | `llmgateway-providers/google-vertex/gemini-3-flash-preview` | 1.0M | | | | | | $0.50 | $3 |
243
237
  | `llmgateway-providers/google-vertex/gemini-3.1-flash-lite` | 1.0M | | | | | | $0.25 | $2 |
244
238
  | `llmgateway-providers/google-vertex/gemini-3.1-pro-preview` | 1.0M | | | | | | $2 | $12 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![DevPass (LLM Gateway) logo](https://models.dev/logos/llmgateway.svg)DevPass (LLM Gateway)
6
6
 
7
- Access 215 DevPass (LLM Gateway) models through Mastra's model router. Authentication is handled automatically using the `LLMGATEWAY_API_KEY` environment variable.
7
+ Access 212 DevPass (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 [DevPass (LLM Gateway) documentation](https://llmgateway.io/docs).
10
10
 
@@ -66,9 +66,6 @@ for await (const chunk of stream) {
66
66
  | `llmgateway/fugu-max` | 1.0M | | | | | | $2 | $6 |
67
67
  | `llmgateway/fugu-ultra` | 1.0M | | | | | | $5 | $30 |
68
68
  | `llmgateway/fugu-ultra-v2.0` | 1.0M | | | | | | $5 | $30 |
69
- | `llmgateway/gemini-2.5-flash` | 1.0M | | | | | | $0.30 | $3 |
70
- | `llmgateway/gemini-2.5-flash-lite` | 1.0M | | | | | | $0.10 | $0.40 |
71
- | `llmgateway/gemini-2.5-pro` | 1.0M | | | | | | $1 | $10 |
72
69
  | `llmgateway/gemini-3-flash-preview` | 1.0M | | | | | | $0.50 | $3 |
73
70
  | `llmgateway/gemini-3.1-flash-lite` | 1.0M | | | | | | $0.25 | $2 |
74
71
  | `llmgateway/gemini-3.1-pro-preview` | 1.0M | | | | | | $2 | $12 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![NanoGPT logo](https://models.dev/logos/nano-gpt.svg)NanoGPT
6
6
 
7
- Access 615 NanoGPT models through Mastra's model router. Authentication is handled automatically using the `NANO_GPT_API_KEY` environment variable.
7
+ Access 617 NanoGPT models through Mastra's model router. Authentication is handled automatically using the `NANO_GPT_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [NanoGPT documentation](https://docs.nano-gpt.com).
10
10
 
@@ -167,6 +167,7 @@ for await (const chunk of stream) {
167
167
  | `nano-gpt/failspy/Meta-Llama-3-70B-Instruct-abliterated-v3.5` | 8K | | | | | | $0.70 | $0.70 |
168
168
  | `nano-gpt/fastgpt` | 33K | | | | | | $8 | $8 |
169
169
  | `nano-gpt/featherless-ai/Qwerky-72B` | 32K | | | | | | $0.50 | $0.50 |
170
+ | `nano-gpt/fireworks/ember-1` | 1.0M | | | | | | $3 | $15 |
170
171
  | `nano-gpt/GalrionSoftworks/MN-LooseCannon-12B-v1` | 16K | | | | | | $0.49 | $0.49 |
171
172
  | `nano-gpt/gemini-2.0-pro-exp-02-05` | 2.1M | | | | | | $2 | $8 |
172
173
  | `nano-gpt/gemini-2.0-pro-reasoner` | 128K | | | | | | $1 | $5 |
@@ -295,6 +296,7 @@ for await (const chunk of stream) {
295
296
  | `nano-gpt/meta/muse-spark-1.2-contributor` | 1.0M | | | | | | $0.10 | $0.20 |
296
297
  | `nano-gpt/meta/muse-spark-1.3` | 1.0M | | | | | | $1 | $4 |
297
298
  | `nano-gpt/meta/muse-spark-1.3-contributor` | 1.0M | | | | | | $0.10 | $0.20 |
299
+ | `nano-gpt/meta/muse-spark-open` | 1.0M | | | | | | $1 | $4 |
298
300
  | `nano-gpt/microsoft/wizardlm-2-8x22b` | 66K | | | | | | $0.49 | $0.49 |
299
301
  | `nano-gpt/MiniMax-M1` | 1.0M | | | | | | $0.14 | $1 |
300
302
  | `nano-gpt/minimax/minimax-01` | 1.0M | | | | | | $0.14 | $1 |
@@ -454,7 +456,7 @@ for await (const chunk of stream) {
454
456
  | `nano-gpt/qwen/qwen3-coder-next` | 262K | | | | | | $0.25 | $0.80 |
455
457
  | `nano-gpt/qwen/qwen3-max` | 256K | | | | | | $1 | $6 |
456
458
  | `nano-gpt/qwen/qwen3-max-2026-01-23` | 256K | | | | | | $1 | $6 |
457
- | `nano-gpt/qwen/qwen3-next-80b-a3b-instruct` | 262K | | | | | | $0.09 | $1 |
459
+ | `nano-gpt/qwen/qwen3-next-80b-a3b-instruct` | 262K | | | | | | $0.10 | $1 |
458
460
  | `nano-gpt/qwen/qwen3-next-80b-a3b-thinking` | 256K | | | | | | $0.15 | $0.65 |
459
461
  | `nano-gpt/qwen/qwen3-vl-235b-a22b-instruct` | 131K | | | | | | $0.30 | $2 |
460
462
  | `nano-gpt/qwen/qwen3-vl-235b-a22b-thinking` | 131K | | | | | | $0.50 | $6 |
@@ -79,7 +79,7 @@ const agent = new Agent({
79
79
  id: "custom-agent",
80
80
  name: "custom-agent",
81
81
  model: {
82
- url: "https://opencode.ai/inference/go/v1",
82
+ url: "https://opencode.ai/inference/go/openai/v1",
83
83
  id: "opencode-go/cat-jam-free",
84
84
  apiKey: process.env.OPENCODE_API_KEY,
85
85
  headers: {
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![OpenCode logo](https://models.dev/logos/opencode.svg)OpenCode
6
6
 
7
- Access 124 OpenCode models through Mastra's model router. Authentication is handled automatically using the `OPENCODE_API_KEY` environment variable.
7
+ Access 126 OpenCode models through Mastra's model router. Authentication is handled automatically using the `OPENCODE_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [OpenCode documentation](https://opencode.ai/v2/docs/console/models/).
10
10
 
@@ -73,6 +73,7 @@ for await (const chunk of stream) {
73
73
  | `opencode/glm-5.2` | 1.0M | | | | | | $1 | $4 |
74
74
  | `opencode/glm-5.3` | 1.0M | | | | | | $1 | $4 |
75
75
  | `opencode/glm-5.3-flash` | 1.0M | | | | | | $0.15 | $0.50 |
76
+ | `opencode/glm-5.3-flash-free` | 200K | | | | | | — | — |
76
77
  | `opencode/gpt-5` | 400K | | | | | | $1 | $9 |
77
78
  | `opencode/gpt-5-codex` | 400K | | | | | | $1 | $9 |
78
79
  | `opencode/gpt-5-nano` | 400K | | | | | | $0.05 | $0.40 |
@@ -105,6 +106,7 @@ for await (const chunk of stream) {
105
106
  | `opencode/kimi-k2.6` | 262K | | | | | | $0.95 | $4 |
106
107
  | `opencode/kimi-k2.7-code` | 262K | | | | | | $0.95 | $4 |
107
108
  | `opencode/kimi-k3` | 1.0M | | | | | | $3 | $15 |
109
+ | `opencode/ll-alpha-free` | 262K | | | | | | — | — |
108
110
  | `opencode/longcat-2.5-preview-free` | 1.0M | | | | | | — | — |
109
111
  | `opencode/mimo-v2.6-flash-free` | 200K | | | | | | — | — |
110
112
  | `opencode/minimax-m2.5` | 205K | | | | | | $0.30 | $1 |
@@ -134,7 +136,7 @@ const agent = new Agent({
134
136
  id: "custom-agent",
135
137
  name: "custom-agent",
136
138
  model: {
137
- url: "https://opencode.ai/inference/v1",
139
+ url: "https://opencode.ai/inference/openai/v1",
138
140
  id: "opencode/big-pickle",
139
141
  apiKey: process.env.OPENCODE_API_KEY,
140
142
  headers: {
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ![Prime Inference logo](https://models.dev/logos/prime.svg)Prime Inference
6
6
 
7
- Access 65 Prime Inference models through Mastra's model router. Authentication is handled automatically using the `PRIME_API_KEY` environment variable.
7
+ Access 66 Prime Inference models through Mastra's model router. Authentication is handled automatically using the `PRIME_API_KEY` environment variable.
8
8
 
9
9
  Learn more in the [Prime Inference documentation](https://docs.primeintellect.ai).
10
10
 
@@ -61,6 +61,7 @@ for await (const chunk of stream) {
61
61
  | `prime/google/gemini-4-argon` | 1.0M | | | | | | $2 | $10 |
62
62
  | `prime/google/gemma-3-27b-it` | 131K | | | | | | $0.12 | $0.30 |
63
63
  | `prime/meta-llama/llama-3.3-70b-instruct` | 131K | | | | | | $1 | $2 |
64
+ | `prime/meta/muse-spark-open` | 1.0M | | | | | | $1 | $4 |
64
65
  | `prime/mistralai/mistral-large-2512` | 262K | | | | | | $0.50 | $2 |
65
66
  | `prime/mistralai/mistral-nemo` | 131K | | | | | | $0.17 | $0.17 |
66
67
  | `prime/mistralai/mistral-small-2603` | 262K | | | | | | $0.17 | $0.66 |
@@ -181,6 +181,8 @@ Returns: [`Promise<DurableAgentStreamResult>`](#durableagentstreamresult)
181
181
 
182
182
  Reconnects to an existing run. Use this after a network disconnection. For the supported general reconnect flow, omit `offset` to replay all available cached events before receiving live events.
183
183
 
184
+ When observing from another process, the observing agent must have the same `id` as the agent that started the run. If the persisted run belongs to an agent with a different ID, `observe()` throws `DURABLE_AGENT_OBSERVE_AGENT_MISMATCH`, matching the ownership checks in `resume()` and `recover()`.
185
+
184
186
  For runs configured with `structuredOutput`, an observer in another process reconstructs `output.object` from the persisted schema and replayed text.
185
187
 
186
188
  ```typescript
@@ -427,7 +429,7 @@ Returns: [`Promise<DurableAgentStreamResult>`](#durableagentstreamresult)
427
429
 
428
430
  **modelSettings** (`object`): Model-specific settings such as temperature. Credential-bearing headers (Authorization, X-Api-Key, and similar) are stripped from the serialized snapshot before it crosses process boundaries.
429
431
 
430
- **stopWhen** (`AgentExecutionOptions['stopWhen']`): Predicate or composition that ends the agentic loop early. The closure rides on the in-process run registry; cross-process resumes degrade to maxSteps only.
432
+ **stopWhen** (`AgentExecutionOptions['stopWhen']`): Predicate or composition that ends the agentic loop early. If it throws, fullStream rejects without emitting a step-finish or error chunk. Durable transports preserve the error name and message, but not its stack, cause, or subclass identity. The closure rides on the in-process run registry; cross-process resumes degrade to maxSteps only.
431
433
 
432
434
  **system** (`string | string[]`): Additional system message appended after the agent instructions and before user messages.
433
435
 
@@ -306,9 +306,9 @@ Only retryable AI SDK `APICallError` failures are retried. Other errors reject i
306
306
 
307
307
  ## Observability
308
308
 
309
- When an active Mastra span exists, `decide()` creates a `CLASSIFIER_EVALUATION` child span. It records the classifier and model identifiers, provider, question count and types, attempts, duration, and token usage.
309
+ When an active Mastra span exists, `decide()` creates a `CLASSIFIER_EVALUATION` child span. The span input holds the evaluated `state` and the questions. The span output holds the answers, including probabilities. Span attributes record the classifier and model identifiers, provider, question count and types, attempts, duration, and token usage. The token usage also produces [token and cost metrics](https://mastra.ai/reference/observability/metrics/automatic-metrics).
310
310
 
311
- The span doesn't include the evaluated state, question instructions, criteria, answers, probabilities, provider response body, or generated text.
311
+ To keep the state and answers out of exported traces, set `hideInput` and `hideOutput` in the `tracingOptions` of the agent or workflow run that calls the classifier. See [hiding sensitive input/output](https://mastra.ai/docs/observability/tracing/overview).
312
312
 
313
313
  ## Customize provider responses
314
314
 
@@ -2016,11 +2016,13 @@ Prints help message and exits.
2016
2016
 
2017
2017
  By default, Mastra collects telemetry about your project, including your OS, Mastra version, and Node.js version. Server events also include the project identifiers described below. You can read the [CLI telemetry source code](https://github.com/mastra-ai/mastra/blob/main/packages/cli/src/analytics/index.ts) to check what's collected by the CLI.
2018
2018
 
2019
- When a server started with `mastra dev` or `mastra start` has observability metrics enabled, Mastra sends aggregated model usage at startup: input and output token counts per provider and model, plus the command (`dev` or `start`) and `NODE_ENV`. No prompts, responses, or other message content is sent. You can read the [model usage telemetry source code](https://github.com/mastra-ai/mastra/blob/main/packages/core/src/telemetry/usage-telemetry.ts) to check what's collected.
2019
+ When a server started with `mastra dev`, `mastra start`, or a `mastra build` output has observability configured, Mastra counts the input and output tokens each model call uses in that server process. Every 15 minutes, and once more when the server shuts down, it sends a `mastra_model_token_usage_v2` event per provider and model used since the previous report. If no model calls finished since then, nothing is sent. Each event contains the tokens used since the previous report, the report window's start and end times, the reason for the report (`interval` or `shutdown`), the command (`dev`, `start`, or `server` when the build output runs directly), and `NODE_ENV`. No prompts, responses, or other message content is sent. You can read the [model usage telemetry source code](https://github.com/mastra-ai/mastra/blob/main/packages/core/src/telemetry/model-usage-telemetry.ts) to check what's collected.
2020
+
2021
+ For compatibility with older analysis, servers also send the earlier `mastra_model_token_usage` event at startup. It reads token totals from observability storage and sends the usage added since a cursor saved in `~/.mastra/usage-telemetry.json`. You can read the [startup usage telemetry source code](https://github.com/mastra-ai/mastra/blob/main/packages/core/src/telemetry/usage-telemetry.ts) to check what's collected.
2020
2022
 
2021
2023
  At server startup, Mastra sends a project-surface snapshot with component counts, feature flags, and the coarse storage backend category, but no component names or component identifiers. You can read the [feature telemetry source code](https://github.com/mastra-ai/mastra/blob/main/packages/core/src/telemetry/feature-telemetry.ts) to check what's collected.
2022
2024
 
2023
- The server events `mastra_feature_usage` and `mastra_model_token_usage` include:
2025
+ The server events `mastra_feature_usage`, `mastra_model_token_usage`, and `mastra_model_token_usage_v2` include:
2024
2026
 
2025
2027
  - `project_id`: The first 16 hexadecimal characters of the SHA-256 hash of `MASTRA_PROJECT_ROOT`, or the current working directory when unset. This identifier also keys the local model-usage cursor.
2026
2028
  - `project_id2`: An optional identifier for correlation across machines and deployments. If the trimmed `MASTRA_PROJECT_ID` value has UUID format, the value is sent **unhashed**, prefixed with `mp_`. Search for `mp_<platform-project-id>` to find that project's telemetry. Names, slugs, and other non-UUID values aren't sent as Platform identifiers.
@@ -65,6 +65,50 @@ const selected = await mastraClient.getTrace(list.spans[0].traceId)
65
65
 
66
66
  It accepts the same filtering, ordering and delta-polling arguments as `listTraces()`. Use `listTraces()` when you actually need the full span payloads.
67
67
 
68
+ ## Querying spans
69
+
70
+ `querySpans()` returns completed span summaries across traces. It requires a positive ISO timestamp range over span start time and supports cursor pagination:
71
+
72
+ ```typescript
73
+ const result = await mastraClient.querySpans({
74
+ timeRange: {
75
+ from: '2026-10-01T00:00:00.000Z',
76
+ to: '2026-10-02T00:00:00.000Z',
77
+ },
78
+ where: {
79
+ op: 'and',
80
+ args: [
81
+ { op: 'eq', left: { path: 'threadId' }, right: { literal: 'thread-123' } },
82
+ { op: 'gte', left: { path: 'durationMs' }, right: { literal: 1000 } },
83
+ ],
84
+ },
85
+ orderBy: [{ field: 'startedAt', direction: 'desc' }],
86
+ page: { limit: 100 },
87
+ })
88
+
89
+ // Pass result.page.next as page.after to continue with the same filters and ordering.
90
+ console.log(result.spans)
91
+ ```
92
+
93
+ Pages default to 100 rows and allow at most 1,000. The response is `{ spans, page: { next } }`, without a total count. Ordering accepts exactly one of `startedAt` or `endedAt`, ascending or descending, and defaults to descending start time.
94
+
95
+ | Fields | Operators |
96
+ | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
97
+ | `traceId`, `spanId`, `parentSpanId`, `threadId` | `eq`, `ne`, `in`, `notIn`, `exists`, `notExists` |
98
+ | `organizationId`, `resourceId`, `runId`, `sessionId`, `userId`, `requestId`, `serviceName`, `experimentId`, `environment`, `executionSource` | Same string operators |
99
+ | Entity, parent entity and root entity `Type`, `Id`, `Name`, `VersionId` fields, such as `parentEntityId` | Same string operators |
100
+ | `name`, `spanType`, `status` | Same string operators; `name` also accepts `matches` / `notMatches` for normalized whole words and phrases |
101
+ | `startedAt`, `endedAt`, `durationMs` | Comparisons, membership and presence |
102
+ | `error` | `exists`, `notExists` |
103
+
104
+ Combine predicates with `and`, `or` and `not`. Membership uses `{ op: 'in', value: { path: 'spanType' }, set: ['agent_run', 'tool_call'] }`. A span's status is `error` when it has an error and `success` otherwise.
105
+
106
+ Each summary includes identity, context, entity lineage, status, timestamps, `durationMs`, model/provider and input/output/error previews. Model/provider are available in returned rows but aren't filterable.
107
+
108
+ The additional identity, context and parent/root entity filters require an updated storage adapter. With an older adapter, requests using these filters return a structured `422` error.
109
+
110
+ DuckDB returns `null` for parent/root entity type, ID and name, and for `executionSource`. Equality filters on these fields match no spans. Parent/root entity version IDs remain available.
111
+
68
112
  ## Querying traces
69
113
 
70
114
  `queryTraces()` finds completed logical traces using trace fields and conditions over related spans. Every query requires an ISO timestamp range.
@@ -18,9 +18,9 @@ export const mastra = new Mastra({
18
18
 
19
19
  Returns: `Promise<ChannelsResolver>`. See [The resolver](#the-resolver).
20
20
 
21
- The [documented channel setup](https://mastra.ai/docs/mastra-platform/connect/channels) covers Slack, Telegram, and Discord. Their implementations come from `@mastra/slack`, `@mastra/telegram`, and `@mastra/discord`, loaded on demand. Use those packages directly to configure a channel outside the platform connection flow.
21
+ The [documented channel setup](https://mastra.ai/docs/mastra-platform/connect/channels) covers Slack, Telegram, Discord, and Microsoft Teams. Their implementations come from `@mastra/slack`, `@mastra/telegram`, `@mastra/discord`, and `@mastra/teams`, loaded on demand. Use those packages directly to configure a channel outside the platform connection flow.
22
22
 
23
- The SDK also registers `microsoft-teams`, backed by `@mastra/teams`. SDK registration doesn't guarantee availability in the platform catalog. Constructing the Teams provider requires `MASTRA_ENCRYPTION_KEY`, a base64-encoded 32-byte value for protecting stored bot secrets. Without it, the resolver warns and skips Teams, including its routes.
23
+ The Teams provider encrypts stored bot secrets with `MASTRA_ENCRYPTION_KEY` when set. When it isn't, the key is derived from the platform access token and a warning is logged while a Teams connection is active. Rotating the platform access token makes stored bot credentials unreadable (disconnect and reconnect to re-provision). Projects without a Teams connection are unaffected.
24
24
 
25
25
  ## Parameters
26
26
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Provider toolsets
6
6
 
7
- This page documents generated toolsets for 21 providers (883 tools in this version of `@mastra/connect`). It isn't an exhaustive list of providers registered in the SDK or available in the platform catalog. [`tools()`](https://mastra.ai/reference/connect/tools) exposes a provider's toolset when the project has an active connection for its provider ID.
7
+ This page documents generated toolsets for 22 providers (908 tools in this version of `@mastra/connect`). It isn't an exhaustive list of providers registered in the SDK or available in the platform catalog. [`tools()`](https://mastra.ai/reference/connect/tools) exposes a provider's toolset when the project has an active connection for its provider ID.
8
8
 
9
9
  Tool keys are stable identifiers of the form `<provider>_<action>` and are the values accepted by `allowTools` and `disallowTools`. Toolsets are versioned with the package: the exact list depends on the installed `@mastra/connect` version, and this page reflects the version it was generated from.
10
10
 
@@ -25,6 +25,7 @@ MCP providers (Attio, Canva, Clay, Neon, Render, Robinhood, and Sanity) serve th
25
25
  | ![](https://app.nango.dev/images/template-logos/incident-io.svg) [incident.io](#incidentio) | `incident-io` | 66 |
26
26
  | ![](https://cdn.simpleicons.org/jira?viewbox=auto\&size=28) [Jira](#jira) | `jira` | 38 |
27
27
  | ![](https://cdn.simpleicons.org/linear?viewbox=auto\&size=28) [Linear](#linear) | `linear` | 46 |
28
+ | ![](https://cdn.simpleicons.org/microsoftteams?viewbox=auto\&size=28) [Microsoft Teams](#microsoft-teams) | `microsoft-teams` | 25 |
28
29
  | ![](https://cdn.simpleicons.org/notion?viewbox=auto\&size=28) [Notion](#notion) | `notion` | 44 |
29
30
  | ![](https://svgl.app/library/openai.svg) [OpenAI](#openai) | `openai` | 26 |
30
31
  | ![](https://cdn.simpleicons.org/posthog?viewbox=auto\&size=28) [PostHog](#posthog) | `posthog` | 67 |
@@ -657,6 +658,38 @@ Provider ID: `linear` · 46 tools
657
658
  | `linear_update_issue_relation` | Update fields on an existing Linear issue relation. |
658
659
  | `linear_update_project` | Update an existing Linear project. |
659
660
 
661
+ ## Microsoft Teams
662
+
663
+ Provider ID: `microsoft-teams` · 25 tools
664
+
665
+ | Tool | Description |
666
+ | ------------------------------------------ | ------------------------------------------------ |
667
+ | `microsoft_teams_add_team_member` | Add a member to a team |
668
+ | `microsoft_teams_create_channel` | Create a channel in a team. |
669
+ | `microsoft_teams_create_channel_message` | Post a root message in a channel |
670
+ | `microsoft_teams_create_channel_tab` | Add a tab to a channel. |
671
+ | `microsoft_teams_create_chat` | Create a one-on-one or group chat. |
672
+ | `microsoft_teams_create_chat_message` | Send a message in a chat |
673
+ | `microsoft_teams_create_team` | Create a team from a template or existing group. |
674
+ | `microsoft_teams_delete_channel` | Delete a channel from a team |
675
+ | `microsoft_teams_get_channel` | Retrieve a channel by ID. |
676
+ | `microsoft_teams_get_channel_message` | Retrieve a channel message by ID. |
677
+ | `microsoft_teams_get_chat` | Retrieve a chat by ID. |
678
+ | `microsoft_teams_get_chat_message` | Retrieve a chat message by ID. |
679
+ | `microsoft_teams_get_team` | Retrieve a team by ID. |
680
+ | `microsoft_teams_list_channel_messages` | List root messages in a channel. |
681
+ | `microsoft_teams_list_channel_replies` | List replies under a channel message thread |
682
+ | `microsoft_teams_list_channel_tabs` | List tabs configured on a channel. |
683
+ | `microsoft_teams_list_channels` | List channels in a team. |
684
+ | `microsoft_teams_list_chat_members` | List members in a chat |
685
+ | `microsoft_teams_list_chat_messages` | List messages in a chat. |
686
+ | `microsoft_teams_list_chats` | List chats for a user. |
687
+ | `microsoft_teams_list_joined_teams` | List teams the user has joined |
688
+ | `microsoft_teams_list_team_members` | List members in a team. |
689
+ | `microsoft_teams_remove_team_member` | Remove a member from a team. |
690
+ | `microsoft_teams_reply_to_channel_message` | Reply to a channel message thread. |
691
+ | `microsoft_teams_update_channel` | Update mutable channel properties. |
692
+
660
693
  ## Notion
661
694
 
662
695
  Provider ID: `notion` · 44 tools
@@ -32,13 +32,19 @@ const filtered = await mastra.datasets.list({
32
32
  const forAgents = await mastra.datasets.list({
33
33
  filters: { targetIds: ['agent-a', 'agent-b'] },
34
34
  })
35
+
36
+ // Fetch specific datasets by ID, all on one page
37
+ const byId = await mastra.datasets.list({
38
+ perPage: false,
39
+ filters: { datasetIds: ['dataset-1', 'dataset-2'] },
40
+ })
35
41
  ```
36
42
 
37
43
  ## Parameters
38
44
 
39
45
  **page** (`number`): Page number. Defaults to 0.
40
46
 
41
- **perPage** (`number`): Number of datasets per page. Defaults to 20.
47
+ **perPage** (`number | false`): Number of datasets per page, or false to return every match on one page. Defaults to 20.
42
48
 
43
49
  **filters** (`object`): Optional filters applied at the storage layer.
44
50
 
@@ -54,6 +60,8 @@ const forAgents = await mastra.datasets.list({
54
60
 
55
61
  **filters.targetIds** (`string[]`): Restrict to datasets whose targetIds intersect this list (any-overlap match). Empty array is treated as no filter.
56
62
 
63
+ **filters.datasetIds** (`string[]`): Restrict to datasets with these IDs. Empty array matches no datasets. Pass perPage: false to get every match on one page.
64
+
57
65
  **filters.name** (`string`): Case-insensitive substring match on dataset name. Empty string is treated as no filter.
58
66
 
59
67
  ## Returns
@@ -10,7 +10,7 @@ For setup instructions, see the [Metrics overview](https://mastra.ai/docs/observ
10
10
 
11
11
  ## When Mastra emits automatic metrics
12
12
 
13
- Metrics are extracted from spans when they end. The observability layer inspects each completed span, calculates duration, and (for model generation spans) reads token usage data. No manual instrumentation is needed.
13
+ Metrics are extracted from spans when they end. The observability layer inspects each completed span, calculates duration, and reads token usage data from model generation and classifier evaluation spans. No manual instrumentation is needed.
14
14
 
15
15
  ### What affects whether a metric is available
16
16
 
@@ -35,7 +35,7 @@ Duration metrics record execution time in milliseconds, calculated from the span
35
35
 
36
36
  ## Token usage metrics
37
37
 
38
- Token metrics are emitted only from `MODEL_GENERATION` spans that include `usage` data. Token metrics require usage data from the provider.
38
+ Token metrics are emitted from `MODEL_GENERATION` and `CLASSIFIER_EVALUATION` spans that include `usage` data. Token metrics require usage data from the provider.
39
39
 
40
40
  ### Input token metrics
41
41
 
@@ -142,7 +142,7 @@ When you spot a spike in latency or token usage on the Metrics dashboard, correl
142
142
 
143
143
  ### Token metrics are missing
144
144
 
145
- - **Span is a model generation**: Token metrics are only emitted from `MODEL_GENERATION` spans.
145
+ - **Span is a model generation or classifier evaluation**: Token metrics are only emitted from `MODEL_GENERATION` and `CLASSIFIER_EVALUATION` spans.
146
146
  - **Provider reports usage**: The model provider must include `usage` data in its response. Usage data is required to emit token metrics.
147
147
 
148
148
  ## Related
@@ -110,6 +110,7 @@ All metric operations accept the same optional `filters` object. Raw list reques
110
110
  | `userId` | `string` | User ID |
111
111
  | `organizationId` | `string` | Organization ID |
112
112
  | `experimentId` | `string` | Experiment or evaluation run ID |
113
+ | `experimentIds` | `string[]` | One to 1,000 experiment IDs |
113
114
  | `serviceName` | `string` | Service name |
114
115
  | `environment` | `string` | Environment name |
115
116
  | `resourceId` | `string` | Resource ID |
@@ -542,6 +542,9 @@ interface AgentRunAttributes {
542
542
 
543
543
  /** Maximum steps allowed */
544
544
  maxSteps?: number
545
+
546
+ /** When the run's model streamed its first chunk, copied from the agent's own first generation */
547
+ completionStartTime?: Date
545
548
  }
546
549
  ```
547
550
 
@@ -639,6 +642,9 @@ interface ModelStepAttributes {
639
642
 
640
643
  /** Result warnings */
641
644
  warnings?: Record<string, any>
645
+
646
+ /** When the step's first inference streamed its first chunk */
647
+ completionStartTime?: Date
642
648
  }
643
649
  ```
644
650
 
@@ -248,6 +248,24 @@ const stream = await agent.stream('message for agent')
248
248
 
249
249
  **spanId** (`string`): The root span ID associated with this execution when Tracing is enabled. Use this for span-level lookup and correlation.
250
250
 
251
+ ## `stopWhen` errors
252
+
253
+ If a `stopWhen` predicate throws, `fullStream` rejects with that error. The stream does not emit a `step-finish`, `finish`, or `error` chunk for the failure. Catch the rejection around stream consumption:
254
+
255
+ ```ts
256
+ async function consumeStream() {
257
+ try {
258
+ for await (const chunk of stream.fullStream) {
259
+ console.log(chunk)
260
+ }
261
+ } catch (error) {
262
+ console.error('stopWhen failed', error)
263
+ }
264
+ }
265
+ ```
266
+
267
+ Durable transports reconstruct cross-process errors from their serialized name and message. The original stack, cause, and subclass identity are not available to the stream consumer.
268
+
251
269
  ## Signal visibility
252
270
 
253
271
  Signals, including reactive reminders, appear in `fullStream` by default. Set `hideSignals` to omit selected signal chunks from your stream:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/mcp-docs-server",
3
- "version": "1.3.9-alpha.1",
3
+ "version": "1.3.9-alpha.3",
4
4
  "description": "MCP server for accessing Mastra.ai documentation, changelogs, and news.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -26,8 +26,8 @@
26
26
  "@mastra/mcp-legacy": "npm:@mastra/mcp@^1.18.0",
27
27
  "local-pkg": "^1.1.2",
28
28
  "zod": "^4.6.4",
29
- "@mastra/core": "1.78.1-alpha.0",
30
- "@mastra/mcp": "^2.4.2-alpha.0"
29
+ "@mastra/mcp": "^2.4.2-alpha.0",
30
+ "@mastra/core": "1.79.0-alpha.1"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@hono/node-server": "^2.0.0",
@@ -45,7 +45,7 @@
45
45
  "vitest": "4.1.11",
46
46
  "@internal/lint": "0.0.144",
47
47
  "@internal/types-builder": "0.0.119",
48
- "@mastra/core": "1.78.1-alpha.0"
48
+ "@mastra/core": "1.79.0-alpha.1"
49
49
  },
50
50
  "homepage": "https://mastra.ai",
51
51
  "repository": {