@mastra/mcp-docs-server 1.2.2-alpha.5 → 1.2.2-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -79,6 +79,27 @@ const buildMode = { id: 'build', additionalTools: { deployTool } }
79
79
 
80
80
  You can't set both `tools` and `additionalTools` on the same mode.
81
81
 
82
+ ### Restricting tool visibility
83
+
84
+ `tools` and `additionalTools` control which tools are **added** to a mode's run — they don't hide the backing agent's own tools. To restrict which of those tools the model can actually see and call, set `availableTools`:
85
+
86
+ ```typescript
87
+ const reviewMode = {
88
+ id: 'review',
89
+ name: 'Review',
90
+ // Only these tools are visible to the model in this mode.
91
+ availableTools: ['view', 'find_files', 'search_content'],
92
+ }
93
+ ```
94
+
95
+ `availableTools` is a per-mode visibility allowlist that matches each tool by its final exposed name:
96
+
97
+ - **`undefined`** (default): no mode-level restriction — every tool is visible.
98
+ - **`[]`**: no tools are available for this mode.
99
+ - A denied tool stays hidden even if it appears in the list. Per-tool and per-category `deny` rules in your permission config always take precedence.
100
+
101
+ Workspace tools use the same list as every other tool — reference them by their exposed names (`view`, `write_file`, `find_files`, etc.). Visibility is enforced at LLM-call time, so the model never sees — and can't attempt to call — a tool outside the allowlist.
102
+
82
103
  ### Mode transitions
83
104
 
84
105
  A mode can declare a `transitionsTo` target. When the `submit_plan` built-in tool runs in that mode, the Harness transitions to the target mode on approval:
@@ -1,6 +1,6 @@
1
1
  # ![OpenRouter logo](https://models.dev/logos/openrouter.svg)OpenRouter
2
2
 
3
- OpenRouter aggregates models from multiple providers with enhanced features like rate limiting and failover. Access 336 models through Mastra's model router.
3
+ OpenRouter aggregates models from multiple providers with enhanced features like rate limiting and failover. Access 337 models through Mastra's model router.
4
4
 
5
5
  Learn more in the [OpenRouter documentation](https://openrouter.ai/models).
6
6
 
@@ -336,6 +336,7 @@ ANTHROPIC_API_KEY=ant-...
336
336
  | `rekaai/reka-flash-3` |
337
337
  | `relace/relace-apply-3` |
338
338
  | `relace/relace-search` |
339
+ | `sakana/fugu-ultra` |
339
340
  | `sao10k/l3-lunaris-8b` |
340
341
  | `sao10k/l3.1-70b-hanami-x1` |
341
342
  | `sao10k/l3.1-euryale-70b` |
@@ -1,6 +1,6 @@
1
1
  # ![Vercel logo](https://models.dev/logos/vercel.svg)Vercel
2
2
 
3
- Vercel aggregates models from multiple providers with enhanced features like rate limiting and failover. Access 290 models through Mastra's model router.
3
+ Vercel aggregates models from multiple providers with enhanced features like rate limiting and failover. Access 291 models through Mastra's model router.
4
4
 
5
5
  Learn more in the [Vercel documentation](https://ai-sdk.dev/providers/ai-sdk-providers).
6
6
 
@@ -323,4 +323,5 @@ ANTHROPIC_API_KEY=ant-...
323
323
  | `zai/glm-5-turbo` |
324
324
  | `zai/glm-5.1` |
325
325
  | `zai/glm-5.2` |
326
+ | `zai/glm-5.2-fast` |
326
327
  | `zai/glm-5v-turbo` |
@@ -1,6 +1,6 @@
1
1
  # Model Providers
2
2
 
3
- Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to 4536 models from 133 providers through a single API.
3
+ Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to 4544 models from 133 providers through a single API.
4
4
 
5
5
  ## Features
6
6
 
@@ -1,6 +1,6 @@
1
1
  # ![Berget.AI logo](https://models.dev/logos/berget.svg)Berget.AI
2
2
 
3
- Access 7 Berget.AI models through Mastra's model router. Authentication is handled automatically using the `BERGET_API_KEY` environment variable.
3
+ Access 8 Berget.AI models through Mastra's model router. Authentication is handled automatically using the `BERGET_API_KEY` environment variable.
4
4
 
5
5
  Learn more in the [Berget.AI documentation](https://api.berget.ai).
6
6
 
@@ -39,8 +39,9 @@ for await (const chunk of stream) {
39
39
  | `berget/mistralai/Mistral-Medium-3.5-128B` | 262K | | | | | | $2 | $6 |
40
40
  | `berget/mistralai/Mistral-Small-3.2-24B-Instruct-2506` | 32K | | | | | | $0.33 | $0.33 |
41
41
  | `berget/moonshotai/Kimi-K2.6` | 262K | | | | | | $0.83 | $4 |
42
- | `berget/openai/gpt-oss-120b` | 128K | | | | | | $0.44 | $0.99 |
42
+ | `berget/openai/gpt-oss-120b` | 128K | | | | | | $0.22 | $0.83 |
43
43
  | `berget/zai-org/GLM-4.7` | 128K | | | | | | $0.77 | $3 |
44
+ | `berget/zai-org/GLM-5.2` | 524K | | | | | | $2 | $5 |
44
45
 
45
46
  ## Advanced configuration
46
47
 
@@ -70,7 +71,7 @@ const agent = new Agent({
70
71
  model: ({ requestContext }) => {
71
72
  const useAdvanced = requestContext.task === "complex";
72
73
  return useAdvanced
73
- ? "berget/zai-org/GLM-4.7"
74
+ ? "berget/zai-org/GLM-5.2"
74
75
  : "berget/google/gemma-4-31B-it";
75
76
  }
76
77
  });
@@ -1,6 +1,6 @@
1
1
  # ![evroc logo](https://models.dev/logos/evroc.svg)evroc
2
2
 
3
- Access 13 evroc models through Mastra's model router. Authentication is handled automatically using the `EVROC_API_KEY` environment variable.
3
+ Access 15 evroc models through Mastra's model router. Authentication is handled automatically using the `EVROC_API_KEY` environment variable.
4
4
 
5
5
  Learn more in the [evroc documentation](https://docs.evroc.com/products/think/overview.html).
6
6
 
@@ -32,21 +32,23 @@ for await (const chunk of stream) {
32
32
 
33
33
  ## Models
34
34
 
35
- | Model | Context | Tools | Reasoning | Image | Audio | Video | Input $/1M | Output $/1M |
36
- | ---------------------------------------------------- | ------- | ----- | --------- | ----- | ----- | ----- | ---------- | ----------- |
37
- | `evroc/intfloat/multilingual-e5-large-instruct` | 512 | | | | | | $0.12 | $0.12 |
38
- | `evroc/KBLab/kb-whisper-large` | 448 | | | | | | $0.00 | $0.00 |
39
- | `evroc/microsoft/Phi-4-multimodal-instruct` | 32K | | | | | | $0.24 | $0.47 |
40
- | `evroc/mistralai/devstral-small-2-24b-instruct-2512` | 33K | | | | | | $0.12 | $0.47 |
41
- | `evroc/mistralai/Magistral-Small-2509` | 131K | | | | | | $0.59 | $2 |
42
- | `evroc/mistralai/Voxtral-Small-24B-2507` | 32K | | | | | | $0.00 | $0.00 |
43
- | `evroc/moonshotai/Kimi-K2.5` | 262K | | | | | | $1 | $6 |
44
- | `evroc/nvidia/Llama-3.3-70B-Instruct-FP8` | 131K | | | | | | $1 | $1 |
45
- | `evroc/openai/gpt-oss-120b` | 66K | | | | | | $0.24 | $0.94 |
46
- | `evroc/openai/whisper-large-v3` | 448 | | | | | | $0.00 | $0.00 |
47
- | `evroc/Qwen/Qwen3-30B-A3B-Instruct-2507-FP8` | 64K | | | | | | $0.35 | $1 |
48
- | `evroc/Qwen/Qwen3-Embedding-8B` | 41K | | | | | | $0.12 | $0.12 |
49
- | `evroc/Qwen/Qwen3-VL-30B-A3B-Instruct` | 100K | | | | | | $0.24 | $0.94 |
35
+ | Model | Context | Tools | Reasoning | Image | Audio | Video | Input $/1M | Output $/1M |
36
+ | ----------------------------------------------- | ------- | ----- | --------- | ----- | ----- | ----- | ---------- | ----------- |
37
+ | `evroc/evroc/roc` | 262K | | | | | | $3 | $12 |
38
+ | `evroc/google/gemma-4-26B-A4B-it` | 262K | | | | | | $0.14 | $0.57 |
39
+ | `evroc/intfloat/multilingual-e5-large-instruct` | 512 | | | | | | $0.11 | $0.11 |
40
+ | `evroc/KBLab/kb-whisper-large` | 448 | | | | | | $0.00 | $0.00 |
41
+ | `evroc/mistralai/Mistral-Medium-3.5-128B` | 262K | | | | | | $2 | $7 |
42
+ | `evroc/mistralai/Voxtral-Small-24B-2507` | 32K | | | | | | $0.00 | $0.00 |
43
+ | `evroc/moonshotai/Kimi-K2.6` | 262K | | | | | | $1 | $6 |
44
+ | `evroc/nvidia/Llama-3.3-70B-Instruct-FP8` | 128K | | | | | | $1 | $1 |
45
+ | `evroc/openai/gpt-oss-120b` | 66K | | | | | | $0.23 | $0.92 |
46
+ | `evroc/openai/whisper-large-v3` | 448 | | | | | | $0.00 | $0.00 |
47
+ | `evroc/openai/whisper-large-v3-turbo` | 448 | | | | | | $0.00 | $0.00 |
48
+ | `evroc/Qwen/Qwen3-Embedding-8B` | 41K | | | | | | $0.12 | $0.12 |
49
+ | `evroc/Qwen/Qwen3-Reranker-4B` | 32K | | | | | | $0.06 | |
50
+ | `evroc/Qwen/Qwen3-VL-30B-A3B-Instruct` | 100K | | | | | | $0.23 | $0.92 |
51
+ | `evroc/Qwen/Qwen3.6-35B-A3B-FP8` | 262K | | | | | | $0.34 | $1 |
50
52
 
51
53
  ## Advanced configuration
52
54
 
@@ -76,7 +78,7 @@ const agent = new Agent({
76
78
  model: ({ requestContext }) => {
77
79
  const useAdvanced = requestContext.task === "complex";
78
80
  return useAdvanced
79
- ? "evroc/openai/whisper-large-v3"
81
+ ? "evroc/openai/whisper-large-v3-turbo"
80
82
  : "evroc/KBLab/kb-whisper-large";
81
83
  }
82
84
  });
@@ -1,6 +1,6 @@
1
1
  # ![LLM Gateway logo](https://models.dev/logos/llmgateway.svg)LLM Gateway
2
2
 
3
- Access 181 LLM Gateway models through Mastra's model router. Authentication is handled automatically using the `LLMGATEWAY_API_KEY` environment variable.
3
+ Access 182 LLM Gateway models through Mastra's model router. Authentication is handled automatically using the `LLMGATEWAY_API_KEY` environment variable.
4
4
 
5
5
  Learn more in the [LLM Gateway documentation](https://llmgateway.io/docs).
6
6
 
@@ -51,7 +51,7 @@ for await (const chunk of stream) {
51
51
  | `llmgateway/codestral-2508` | 256K | | | | | | $0.30 | $0.90 |
52
52
  | `llmgateway/custom` | 128K | | | | | | — | — |
53
53
  | `llmgateway/deepseek-v3.1` | 128K | | | | | | $0.56 | $2 |
54
- | `llmgateway/deepseek-v3.2` | 164K | | | | | | $0.28 | $0.42 |
54
+ | `llmgateway/deepseek-v3.2` | 164K | | | | | | $0.26 | $0.38 |
55
55
  | `llmgateway/deepseek-v4-flash` | 1.1M | | | | | | $0.14 | $0.28 |
56
56
  | `llmgateway/deepseek-v4-pro` | 1.1M | | | | | | $0.43 | $0.87 |
57
57
  | `llmgateway/fugu-ultra` | 1.0M | | | | | | $5 | $30 |
@@ -68,21 +68,21 @@ for await (const chunk of stream) {
68
68
  | `llmgateway/gemma-4-31b-it` | 262K | | | | | | $0.13 | $0.38 |
69
69
  | `llmgateway/glm-4-32b-0414-128k` | 128K | | | | | | $0.10 | $0.10 |
70
70
  | `llmgateway/glm-4.5` | 131K | | | | | | $0.60 | $2 |
71
- | `llmgateway/glm-4.5-air` | 131K | | | | | | $0.20 | $1 |
71
+ | `llmgateway/glm-4.5-air` | 131K | | | | | | $0.13 | $0.85 |
72
72
  | `llmgateway/glm-4.5-airx` | 128K | | | | | | $1 | $5 |
73
73
  | `llmgateway/glm-4.5-flash` | 128K | | | | | | — | — |
74
74
  | `llmgateway/glm-4.5-x` | 128K | | | | | | $2 | $9 |
75
75
  | `llmgateway/glm-4.5v` | 128K | | | | | | $0.60 | $2 |
76
- | `llmgateway/glm-4.6` | 205K | | | | | | $0.60 | $2 |
76
+ | `llmgateway/glm-4.6` | 205K | | | | | | $0.43 | $2 |
77
77
  | `llmgateway/glm-4.6v` | 131K | | | | | | $0.30 | $0.90 |
78
78
  | `llmgateway/glm-4.6v-flash` | 128K | | | | | | — | — |
79
79
  | `llmgateway/glm-4.6v-flashx` | 128K | | | | | | $0.04 | $0.40 |
80
- | `llmgateway/glm-4.7` | 205K | | | | | | $0.60 | $2 |
80
+ | `llmgateway/glm-4.7` | 205K | | | | | | $0.38 | $2 |
81
81
  | `llmgateway/glm-4.7-flash` | 200K | | | | | | $0.06 | $0.40 |
82
82
  | `llmgateway/glm-4.7-flash-free` | 200K | | | | | | — | — |
83
83
  | `llmgateway/glm-4.7-flashx` | 200K | | | | | | $0.07 | $0.40 |
84
- | `llmgateway/glm-5` | 203K | | | | | | $1 | $3 |
85
- | `llmgateway/glm-5.1` | 205K | | | | | | $1 | $4 |
84
+ | `llmgateway/glm-5` | 203K | | | | | | $0.72 | $2 |
85
+ | `llmgateway/glm-5.1` | 205K | | | | | | $0.93 | $3 |
86
86
  | `llmgateway/glm-5.2` | 1.0M | | | | | | $1 | $4 |
87
87
  | `llmgateway/gpt-3.5-turbo` | 16K | | | | | | $0.50 | $2 |
88
88
  | `llmgateway/gpt-4` | 8K | | | | | | $30 | $60 |
@@ -114,8 +114,8 @@ for await (const chunk of stream) {
114
114
  | `llmgateway/gpt-5.4-pro` | 1.1M | | | | | | $30 | $180 |
115
115
  | `llmgateway/gpt-5.5` | 1.1M | | | | | | $5 | $30 |
116
116
  | `llmgateway/gpt-5.5-pro` | 1.1M | | | | | | $30 | $180 |
117
- | `llmgateway/gpt-oss-120b` | 131K | | | | | | $0.15 | $0.75 |
118
- | `llmgateway/gpt-oss-20b` | 131K | | | | | | $0.10 | $0.50 |
117
+ | `llmgateway/gpt-oss-120b` | 131K | | | | | | $0.05 | $0.25 |
118
+ | `llmgateway/gpt-oss-20b` | 131K | | | | | | $0.04 | $0.15 |
119
119
  | `llmgateway/grok-4` | 256K | | | | | | $3 | $15 |
120
120
  | `llmgateway/grok-4-1-fast-non-reasoning` | 2.0M | | | | | | $0.20 | $0.50 |
121
121
  | `llmgateway/grok-4-1-fast-reasoning` | 2.0M | | | | | | $0.20 | $0.50 |
@@ -125,11 +125,11 @@ for await (const chunk of stream) {
125
125
  | `llmgateway/grok-4-20-reasoning` | 2.0M | | | | | | $2 | $6 |
126
126
  | `llmgateway/grok-4-3` | 1.0M | | | | | | $1 | $3 |
127
127
  | `llmgateway/grok-build-0-1` | 256K | | | | | | $1 | $2 |
128
- | `llmgateway/kimi-k2` | 256K | | | | | | $1 | $3 |
129
- | `llmgateway/kimi-k2-thinking` | 262K | | | | | | $0.60 | $3 |
128
+ | `llmgateway/kimi-k2` | 256K | | | | | | $0.57 | $2 |
129
+ | `llmgateway/kimi-k2-thinking` | 262K | | | | | | $0.57 | $2 |
130
130
  | `llmgateway/kimi-k2-thinking-turbo` | 262K | | | | | | $1 | $8 |
131
- | `llmgateway/kimi-k2.5` | 262K | | | | | | $0.60 | $3 |
132
- | `llmgateway/kimi-k2.6` | 262K | | | | | | $0.95 | $4 |
131
+ | `llmgateway/kimi-k2.5` | 262K | | | | | | $0.41 | $2 |
132
+ | `llmgateway/kimi-k2.6` | 262K | | | | | | $0.50 | $3 |
133
133
  | `llmgateway/kimi-k2.7-code` | 262K | | | | | | $0.95 | $4 |
134
134
  | `llmgateway/kimi-k2.7-code-highspeed` | 262K | | | | | | $2 | $8 |
135
135
  | `llmgateway/llama-3-70b-instruct` | 8K | | | | | | $0.51 | $0.74 |
@@ -139,8 +139,8 @@ for await (const chunk of stream) {
139
139
  | `llmgateway/llama-3.2-11b-instruct` | 128K | | | | | | $0.07 | $0.33 |
140
140
  | `llmgateway/llama-3.2-3b-instruct` | 33K | | | | | | $0.03 | $0.05 |
141
141
  | `llmgateway/llama-3.3-70b-instruct` | 131K | | | | | | $0.13 | $0.40 |
142
- | `llmgateway/llama-4-maverick-17b-instruct` | 1.0M | | | | | | $0.24 | $0.97 |
143
- | `llmgateway/llama-4-scout-17b-instruct` | 131K | | | | | | $0.17 | $0.66 |
142
+ | `llmgateway/llama-4-maverick-17b-instruct` | 1.0M | | | | | | $0.27 | $0.85 |
143
+ | `llmgateway/llama-4-scout-17b-instruct` | 131K | | | | | | $0.18 | $0.59 |
144
144
  | `llmgateway/mimo-v2-omni` | 256K | | | | | | $0.40 | $2 |
145
145
  | `llmgateway/mimo-v2-pro` | 1.0M | | | | | | $1 | $3 |
146
146
  | `llmgateway/mimo-v2.5` | 1.0M | | | | | | $0.14 | $0.28 |
@@ -159,6 +159,7 @@ for await (const chunk of stream) {
159
159
  | `llmgateway/ministral-8b-2512` | 262K | | | | | | $0.15 | $0.15 |
160
160
  | `llmgateway/mistral-large-2512` | 262K | | | | | | $0.50 | $2 |
161
161
  | `llmgateway/mistral-large-latest` | 128K | | | | | | $4 | $12 |
162
+ | `llmgateway/mistral-ocr-latest` | — | | | | | | — | — |
162
163
  | `llmgateway/mistral-small-2506` | 128K | | | | | | $0.10 | $0.30 |
163
164
  | `llmgateway/nemotron-3-ultra-550b` | 262K | | | | | | $0.50 | $3 |
164
165
  | `llmgateway/o1` | 200K | | | | | | $15 | $60 |
@@ -179,21 +180,21 @@ for await (const chunk of stream) {
179
180
  | `llmgateway/qwen2-5-vl-32b-instruct` | 131K | | | | | | $1 | $4 |
180
181
  | `llmgateway/qwen2-5-vl-72b-instruct` | 33K | | | | | | $0.13 | $0.40 |
181
182
  | `llmgateway/qwen3-235b-a22b-fp8` | 41K | | | | | | $0.20 | $0.80 |
182
- | `llmgateway/qwen3-235b-a22b-instruct-2507` | 262K | | | | | | $0.20 | $0.60 |
183
+ | `llmgateway/qwen3-235b-a22b-instruct-2507` | 262K | | | | | | $0.09 | $0.58 |
183
184
  | `llmgateway/qwen3-235b-a22b-thinking-2507` | 262K | | | | | | $0.20 | $0.60 |
184
185
  | `llmgateway/qwen3-30b-a3b-instruct-2507` | 262K | | | | | | $0.10 | $0.30 |
185
186
  | `llmgateway/qwen3-32b` | 33K | | | | | | $0.10 | $0.30 |
186
187
  | `llmgateway/qwen3-4b-fp8` | 128K | | | | | | $0.03 | $0.03 |
187
- | `llmgateway/qwen3-coder-30b-a3b-instruct` | 262K | | | | | | $0.10 | $0.30 |
188
- | `llmgateway/qwen3-coder-480b-a35b-instruct` | 262K | | | | | | $0.40 | $2 |
188
+ | `llmgateway/qwen3-coder-30b-a3b-instruct` | 262K | | | | | | $0.07 | $0.27 |
189
+ | `llmgateway/qwen3-coder-480b-a35b-instruct` | 262K | | | | | | $0.30 | $1 |
189
190
  | `llmgateway/qwen3-coder-flash` | 1.0M | | | | | | $0.30 | $2 |
190
191
  | `llmgateway/qwen3-coder-next` | 262K | | | | | | $0.11 | $0.68 |
191
192
  | `llmgateway/qwen3-coder-plus` | 1.0M | | | | | | $6 | $60 |
192
- | `llmgateway/qwen3-max` | 262K | | | | | | $3 | $15 |
193
+ | `llmgateway/qwen3-max` | 262K | | | | | | $0.84 | $3 |
193
194
  | `llmgateway/qwen3-max-2026-01-23` | 262K | | | | | | $1 | $6 |
194
- | `llmgateway/qwen3-next-80b-a3b-instruct` | 131K | | | | | | $0.50 | $2 |
195
- | `llmgateway/qwen3-next-80b-a3b-thinking` | 131K | | | | | | $0.50 | $6 |
196
- | `llmgateway/qwen3-vl-235b-a22b-instruct` | 131K | | | | | | $0.50 | $2 |
195
+ | `llmgateway/qwen3-next-80b-a3b-instruct` | 131K | | | | | | $0.15 | $2 |
196
+ | `llmgateway/qwen3-next-80b-a3b-thinking` | 131K | | | | | | $0.15 | $1 |
197
+ | `llmgateway/qwen3-vl-235b-a22b-instruct` | 131K | | | | | | $0.30 | $2 |
197
198
  | `llmgateway/qwen3-vl-235b-a22b-thinking` | 131K | | | | | | $0.50 | $2 |
198
199
  | `llmgateway/qwen3-vl-30b-a3b-instruct` | 131K | | | | | | $0.20 | $0.70 |
199
200
  | `llmgateway/qwen3-vl-30b-a3b-thinking` | 131K | | | | | | $0.20 | $1 |
@@ -204,7 +205,7 @@ for await (const chunk of stream) {
204
205
  | `llmgateway/qwen3.6-35b-a3b` | 262K | | | | | | $0.25 | $1 |
205
206
  | `llmgateway/qwen3.6-max-preview` | 262K | | | | | | $1 | $8 |
206
207
  | `llmgateway/qwen3.6-plus` | 262K | | | | | | $0.50 | $3 |
207
- | `llmgateway/qwen3.7-max` | 1.0M | | | | | | $3 | $8 |
208
+ | `llmgateway/qwen3.7-max` | 1.0M | | | | | | $1 | $4 |
208
209
  | `llmgateway/qwen3.7-plus` | 1.0M | | | | | | $0.40 | $2 |
209
210
  | `llmgateway/qwen35-397b-a17b` | 262K | | | | | | $0.60 | $4 |
210
211
  | `llmgateway/qwq-plus` | 131K | | | | | | $0.80 | $2 |
@@ -40,7 +40,7 @@ for await (const chunk of stream) {
40
40
  | `minimax-cn-coding-plan/MiniMax-M2.5-highspeed` | 205K | | | | | | — | — |
41
41
  | `minimax-cn-coding-plan/MiniMax-M2.7` | 205K | | | | | | — | — |
42
42
  | `minimax-cn-coding-plan/MiniMax-M2.7-highspeed` | 205K | | | | | | — | — |
43
- | `minimax-cn-coding-plan/MiniMax-M3` | 512K | | | | | | — | — |
43
+ | `minimax-cn-coding-plan/MiniMax-M3` | 1.0M | | | | | | — | — |
44
44
 
45
45
  ## Advanced configuration
46
46
 
@@ -40,7 +40,7 @@ for await (const chunk of stream) {
40
40
  | `minimax-cn/MiniMax-M2.5-highspeed` | 205K | | | | | | $0.60 | $2 |
41
41
  | `minimax-cn/MiniMax-M2.7` | 205K | | | | | | $0.30 | $1 |
42
42
  | `minimax-cn/MiniMax-M2.7-highspeed` | 205K | | | | | | $0.60 | $2 |
43
- | `minimax-cn/MiniMax-M3` | 512K | | | | | | $0.60 | $2 |
43
+ | `minimax-cn/MiniMax-M3` | 1.0M | | | | | | $0.30 | $1 |
44
44
 
45
45
  ## Advanced configuration
46
46
 
@@ -40,7 +40,7 @@ for await (const chunk of stream) {
40
40
  | `minimax-coding-plan/MiniMax-M2.5-highspeed` | 205K | | | | | | — | — |
41
41
  | `minimax-coding-plan/MiniMax-M2.7` | 205K | | | | | | — | — |
42
42
  | `minimax-coding-plan/MiniMax-M2.7-highspeed` | 205K | | | | | | — | — |
43
- | `minimax-coding-plan/MiniMax-M3` | 512K | | | | | | — | — |
43
+ | `minimax-coding-plan/MiniMax-M3` | 1.0M | | | | | | — | — |
44
44
 
45
45
  ## Advanced configuration
46
46
 
@@ -40,7 +40,7 @@ for await (const chunk of stream) {
40
40
  | `minimax/MiniMax-M2.5-highspeed` | 205K | | | | | | $0.60 | $2 |
41
41
  | `minimax/MiniMax-M2.7` | 205K | | | | | | $0.30 | $1 |
42
42
  | `minimax/MiniMax-M2.7-highspeed` | 205K | | | | | | $0.60 | $2 |
43
- | `minimax/MiniMax-M3` | 512K | | | | | | $0.60 | $2 |
43
+ | `minimax/MiniMax-M3` | 1.0M | | | | | | $0.30 | $1 |
44
44
 
45
45
  ## Advanced configuration
46
46
 
@@ -1,6 +1,6 @@
1
1
  # ![Neuralwatt logo](https://models.dev/logos/neuralwatt.svg)Neuralwatt
2
2
 
3
- Access 13 Neuralwatt models through Mastra's model router. Authentication is handled automatically using the `NEURALWATT_API_KEY` environment variable.
3
+ Access 14 Neuralwatt models through Mastra's model router. Authentication is handled automatically using the `NEURALWATT_API_KEY` environment variable.
4
4
 
5
5
  Learn more in the [Neuralwatt documentation](https://portal.neuralwatt.com/docs).
6
6
 
@@ -37,6 +37,7 @@ for await (const chunk of stream) {
37
37
  | `neuralwatt/glm-5-fast` | 203K | | | | | | $1 | $4 |
38
38
  | `neuralwatt/glm-5.1-fast` | 203K | | | | | | $1 | $4 |
39
39
  | `neuralwatt/glm-5.2` | 1.0M | | | | | | $1 | $5 |
40
+ | `neuralwatt/glm-5.2-short` | 200K | | | | | | $1 | $5 |
40
41
  | `neuralwatt/kimi-k2.5-fast` | 262K | | | | | | $0.52 | $3 |
41
42
  | `neuralwatt/kimi-k2.6-fast` | 262K | | | | | | $0.69 | $3 |
42
43
  | `neuralwatt/moonshotai/Kimi-K2.5` | 262K | | | | | | $0.52 | $3 |
@@ -1,6 +1,6 @@
1
1
  # ![StepFun logo](https://models.dev/logos/stepfun.svg)StepFun
2
2
 
3
- Access 4 StepFun models through Mastra's model router. Authentication is handled automatically using the `STEPFUN_API_KEY` environment variable.
3
+ Access 5 StepFun models through Mastra's model router. Authentication is handled automatically using the `STEPFUN_API_KEY` environment variable.
4
4
 
5
5
  Learn more in the [StepFun documentation](https://platform.stepfun.com/docs/zh/overview/concept).
6
6
 
@@ -38,6 +38,7 @@ for await (const chunk of stream) {
38
38
  | `stepfun/step-2-16k` | 16K | | | | | | $5 | $16 |
39
39
  | `stepfun/step-3.5-flash` | 256K | | | | | | $0.10 | $0.30 |
40
40
  | `stepfun/step-3.5-flash-2603` | 256K | | | | | | $0.10 | $0.30 |
41
+ | `stepfun/step-3.7-flash` | 256K | | | | | | $0.19 | $1 |
41
42
 
42
43
  ## Advanced configuration
43
44
 
@@ -67,7 +68,7 @@ const agent = new Agent({
67
68
  model: ({ requestContext }) => {
68
69
  const useAdvanced = requestContext.task === "complex";
69
70
  return useAdvanced
70
- ? "stepfun/step-3.5-flash-2603"
71
+ ? "stepfun/step-3.7-flash"
71
72
  : "stepfun/step-1-32k";
72
73
  }
73
74
  });
@@ -82,6 +82,8 @@ await harness.sendMessage({ content: 'Hello!' })
82
82
 
83
83
  **modes.additionalTools** (`ToolsInput`): Tools layered on top of the backing agent's tools. Mutually exclusive with \`tools\`.
84
84
 
85
+ **modes.availableTools** (`string[]`): Per-mode tool visibility allowlist. When set, only tools whose final exposed names appear in this list are visible to the model and executable during this mode's runs. \`undefined\` = all tools visible; \`\[]\` = no tools. Per-tool and per-category \`deny\` rules take precedence over this list. Workspace tools use the same list — reference them by exposed names (\`view\`, \`write\_file\`, etc.).
86
+
85
87
  **modes.agent** (`Agent`): The agent for this mode. Deprecated in favor of the top-level \`agent\` config with mode-level overrides.
86
88
 
87
89
  **agent** (`Agent`): Shared backing agent that each mode forks and decorates. When provided, modes layer instructions and tool overrides on top of this agent instead of providing their own.
@@ -92,9 +94,9 @@ await harness.sendMessage({ content: 'Hello!' })
92
94
 
93
95
  **tools** (`ToolsInput | ((ctx) => ToolsInput)`): Tools available to all agents across all modes. It can be a static tools object or a dynamic function that receives the request context.
94
96
 
95
- **workspace** (`Workspace | WorkspaceConfig | ((ctx) => Workspace)`): Workspace configuration. Accepts a pre-constructed Workspace, a WorkspaceConfig for the harness to construct internally, or a dynamic factory function.
97
+ **workspace** (`Workspace | ((ctx) => Workspace)`): Workspace instance or a dynamic factory function. When omitted, each session created via createSession must provide its own workspace. The factory receives the request context and Mastra instance.
96
98
 
97
- **browser** (`MastraBrowser | ((ctx) => MastraBrowser)`): Browser automation configuration. Propagated to mode agents that don't have their own browser configured.
99
+ **browser** (`MastraBrowser | ((ctx) => MastraBrowser)`): Browser automation instance or a dynamic factory function. When omitted, each session created via createSession can provide its own browser.
98
100
 
99
101
  **subagents** (`HarnessSubagent[]`): Subagent definitions. When provided, the harness creates a built-in \`subagent\` tool that parent agents can call to spawn focused subagents.
100
102
 
@@ -160,20 +162,22 @@ await harness.sendMessage({ content: 'Hello!' })
160
162
 
161
163
  #### `init()`
162
164
 
163
- Initialize the harness. Loads storage, initializes the workspace, propagates memory and workspace to mode agents, and starts heartbeat handlers. Call this before using the harness.
165
+ Initialize the harness. Loads storage, initializes a static workspace (dynamic factory workspaces are resolved per-session during `createSession`), propagates memory and workspace to mode agents, and starts heartbeat handlers. Call this before using the harness.
164
166
 
165
167
  ```typescript
166
168
  await harness.init()
167
169
  ```
168
170
 
169
- #### `createSession({ id, ownerId, resourceId? })`
171
+ #### `createSession({ id, ownerId, resourceId?, tags?, workspace?, browser?, requestContext? })`
170
172
 
171
- Create a new, fully-wired `Session` and bring it online. The session starts in the default mode with the seeded model, connects to the Harness's shared machinery (agent, storage/lock, config catalog), and has a current thread (the most recent thread for the resource, or a freshly created one). Call `init()` once before creating sessions so shared storage and workspace are ready.
173
+ Create a new, fully-wired `Session` and bring it online. The session starts in the default mode with the seeded model, connects to the Harness's shared machinery (agent, storage/lock, config catalog), and has a current thread (the most recent thread for the resource, or a freshly created one). Call `init()` once before creating sessions so shared storage is ready.
172
174
 
173
175
  The Harness owns no session of its own — every consumer creates its own session and drives all work through it. In a server or multiplayer setting, each request, thread, or user gets its own session, isolated from every other: independent event bus, mode, model, state, and current thread.
174
176
 
175
177
  `id` and `ownerId` are required — they mirror `SessionRecord.id` and `SessionRecord.ownerId` and are stable for the life of the session. `resourceId` is optional and defaults to `config.resourceId` then `config.id`.
176
178
 
179
+ Each session owns its own `Workspace` and `Browser` instance. When `workspace` is omitted, the Harness resolves its configured workspace (a static instance or a dynamic factory) and passes it to the session. Pass a `workspace` override to give a specific session a different workspace than the Harness default. The workspace is initialized during session creation; `workspace_ready` and `workspace_status_changed` events are emitted on the session bus after `init()` completes, and late subscribers receive a replay of the last workspace status.
180
+
177
181
  ```typescript
178
182
  const session = await harness.createSession({
179
183
  id: 'session-xyz',
@@ -191,6 +195,19 @@ const session = await harness.createSession({
191
195
  })
192
196
  ```
193
197
 
198
+ Override the workspace and browser for a specific session:
199
+
200
+ ```typescript
201
+ const session = await harness.createSession({
202
+ id: 'session-xyz',
203
+ ownerId: 'user-123',
204
+ workspace: myWorkspace,
205
+ browser: myBrowser,
206
+ })
207
+ ```
208
+
209
+ `tags` scopes initial thread selection: a thread is a resume candidate only when its metadata matches every provided tag. This lets worktrees sharing a resourceId each resume their own thread (via a `projectPath` tag).
210
+
194
211
  Switching the resource ID via `harness.setResourceId()` changes only the resource ID, not `id` or `ownerId`. Read them through `session.identity.getId()` and `session.identity.getOwnerId()`.
195
212
 
196
213
  #### `selectOrCreateThread()`
@@ -249,6 +266,48 @@ Return the internal `Mastra` instance, or `undefined` before `init()`. Useful fo
249
266
  const mastra = harness.getMastra()
250
267
  ```
251
268
 
269
+ #### `getWorkspace()`
270
+
271
+ Return the Harness-level workspace if it is a static `Workspace` instance. Dynamic factory workspaces are not resolved here — use [`resolveWorkspace()`](#resolveworkspace-session-requestcontext-) to resolve a factory against a session's request context.
272
+
273
+ ```typescript
274
+ const workspace = harness.getWorkspace()
275
+ ```
276
+
277
+ #### `resolveWorkspace({ session, requestContext? })`
278
+
279
+ Eagerly resolve and cache the workspace. For dynamic workspaces (factory function), this triggers the factory against the given session's request context and caches the result so `getWorkspace()` returns it. Returns the resolved workspace or `undefined` if none is configured.
280
+
281
+ ```typescript
282
+ const workspace = await harness.resolveWorkspace({ session })
283
+ ```
284
+
285
+ ```typescript
286
+ // With an explicit request context
287
+ const requestContext = new RequestContext()
288
+ const workspace = await harness.resolveWorkspace({ session, requestContext })
289
+ ```
290
+
291
+ #### `hasWorkspace()`
292
+
293
+ Whether a workspace is configured on this Harness (static instance or dynamic factory). Sessions without an explicit workspace override fall back to this.
294
+
295
+ ```typescript
296
+ if (harness.hasWorkspace()) {
297
+ // ...
298
+ }
299
+ ```
300
+
301
+ #### `isWorkspaceReady()`
302
+
303
+ Whether the Harness-level static workspace has been initialized. Dynamic factory workspaces are resolved and initialized per-session during `createSession`, so this returns `false` for factory configs until a session is created.
304
+
305
+ ```typescript
306
+ if (harness.isWorkspaceReady()) {
307
+ // ...
308
+ }
309
+ ```
310
+
252
311
  ### Modes
253
312
 
254
313
  #### `listModes()`
@@ -469,52 +528,6 @@ const category = harness.getToolCategory({ toolName: 'mastra_workspace_write_fil
469
528
  // 'edit'
470
529
  ```
471
530
 
472
- ### Workspace
473
-
474
- #### `getWorkspace()`
475
-
476
- Return the current workspace instance, or `undefined` if no workspace is configured or it hasn't been resolved yet.
477
-
478
- ```typescript
479
- const workspace = harness.getWorkspace()
480
- ```
481
-
482
- #### `resolveWorkspace({ requestContext? })`
483
-
484
- Eagerly resolve and cache the workspace. For dynamic workspaces (factory function), this triggers the factory and caches the result so `getWorkspace()` returns it. Returns the resolved workspace or `undefined` if none is configured.
485
-
486
- ```typescript
487
- const workspace = await harness.resolveWorkspace()
488
- ```
489
-
490
- #### `hasWorkspace()`
491
-
492
- Return whether a workspace is configured (static, config-based, or dynamic).
493
-
494
- ```typescript
495
- if (harness.hasWorkspace()) {
496
- const workspace = await harness.resolveWorkspace()
497
- }
498
- ```
499
-
500
- #### `isWorkspaceReady()`
501
-
502
- Return whether the workspace is ready to use. For dynamic workspaces (factory function), always returns `true`. For static workspaces, returns `true` after `init()` succeeds.
503
-
504
- ```typescript
505
- if (harness.isWorkspaceReady()) {
506
- const workspace = harness.getWorkspace()
507
- }
508
- ```
509
-
510
- #### `destroyWorkspace()`
511
-
512
- Destroy the workspace and release resources. Only applies to static workspaces — dynamic workspaces aren't destroyed.
513
-
514
- ```typescript
515
- await harness.destroyWorkspace()
516
- ```
517
-
518
531
  ### Observational Memory
519
532
 
520
533
  #### `loadOMProgress()`
@@ -51,6 +51,8 @@ The session is organized into sub-objects, each owning one domain of per-convers
51
51
 
52
52
  **state** (`SessionState<TState>`): The schema-validated, session-owned Harness state. See state methods below.
53
53
 
54
+ **browser** (`MastraBrowser | undefined`): The browser automation instance for this session. Set at creation via createSession, or from the Harness config default. Undefined when no browser is configured.
55
+
54
56
  ## Methods
55
57
 
56
58
  ### Permissions
@@ -563,6 +565,19 @@ const added = await harness.session.state.update(current => ({
563
565
  }))
564
566
  ```
565
567
 
568
+ ## Scoping tags
569
+
570
+ Sessions carry scoping tags (e.g. `{ projectPath }`) seeded at creation and stamped onto every thread the session creates. Thread listings can be filtered back to the session's scope using these tags.
571
+
572
+ ### `getTags()`
573
+
574
+ Return a copy of the session's scoping tags. Empty object when the session is unscoped.
575
+
576
+ ```typescript
577
+ const tags = harness.session.getTags()
578
+ // { projectPath: '/my/project' }
579
+ ```
580
+
566
581
  ## Related
567
582
 
568
583
  - [Harness class](https://mastra.ai/reference/harness/harness-class)
@@ -638,6 +638,8 @@ processOutputStep?(args: ProcessOutputStepArgs): ProcessorMessageResult;
638
638
 
639
639
  **finishReason** (`string`): The finish reason from the LLM (stop, tool-use, length, etc.).
640
640
 
641
+ **providerMetadata** (`ProviderMetadata`): Provider-specific metadata for the finishing step (e.g. AWS Bedrock guardrail trace). Present when the model step produced provider metadata, including on content-filter blocks where \`steps\` is empty.
642
+
641
643
  **toolCalls** (`ToolCallInfo[]`): Tool calls made in this step (if any).
642
644
 
643
645
  **text** (`string`): Generated text from this step.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @mastra/mcp-docs-server
2
2
 
3
+ ## 1.2.2-alpha.8
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`023766f`](https://github.com/mastra-ai/mastra/commit/023766f44d59b30a50f3a381e33eddde8ab56c00), [`a0509c7`](https://github.com/mastra-ai/mastra/commit/a0509c731a08aa3ed626557c5338126362856f57), [`01caf93`](https://github.com/mastra-ai/mastra/commit/01caf93d71ae2c1e65f49735cafb531975187426), [`c2c1d7b`](https://github.com/mastra-ai/mastra/commit/c2c1d7bb61d2602955f14ed3952f807c2d6eb576), [`3eb852e`](https://github.com/mastra-ai/mastra/commit/3eb852e5435bc908b800193498103dc724f455b0)]:
8
+ - @mastra/core@1.47.0-alpha.5
9
+
10
+ ## 1.2.2-alpha.6
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies [[`462a769`](https://github.com/mastra-ai/mastra/commit/462a769da61850862ca1be3d74134d33078ee6a7), [`f328049`](https://github.com/mastra-ai/mastra/commit/f3280498c324afd2a8d36cd828f5b9f94a2dddc1), [`e545228`](https://github.com/mastra-ai/mastra/commit/e54522856934a5dc030b7b6385771e3548020d59)]:
15
+ - @mastra/core@1.47.0-alpha.4
16
+
3
17
  ## 1.2.2-alpha.5
4
18
 
5
19
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/mcp-docs-server",
3
- "version": "1.2.2-alpha.5",
3
+ "version": "1.2.2-alpha.9",
4
4
  "description": "MCP server for accessing Mastra.ai documentation, changelogs, and news.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -28,7 +28,7 @@
28
28
  "jsdom": "^26.1.0",
29
29
  "local-pkg": "^1.1.2",
30
30
  "zod": "^4.4.3",
31
- "@mastra/core": "1.47.0-alpha.3",
31
+ "@mastra/core": "1.47.0-alpha.5",
32
32
  "@mastra/mcp": "^1.12.0"
33
33
  },
34
34
  "devDependencies": {
@@ -47,7 +47,7 @@
47
47
  "vitest": "4.1.8",
48
48
  "@internal/lint": "0.0.108",
49
49
  "@internal/types-builder": "0.0.83",
50
- "@mastra/core": "1.47.0-alpha.3"
50
+ "@mastra/core": "1.47.0-alpha.5"
51
51
  },
52
52
  "homepage": "https://mastra.ai",
53
53
  "repository": {