@mastra/mcp-docs-server 1.2.17-alpha.3 → 1.2.17-alpha.5

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.
@@ -391,6 +391,8 @@ const agent = new Agent({
391
391
 
392
392
  When enabled, the agent detects suspended tools from message history on the next user message. It extracts `resumeData` based on the tool's `resumeSchema`, then automatically resumes the tool.
393
393
 
394
+ Automatic resumption applies to data-bearing `suspend()` flows. It doesn't approve tools that use `requireApproval`; those tools remain suspended until an explicit approval or decline is submitted through `approveToolCall()`, `declineToolCall()`, `resumeStream({ approved: boolean })`, or an equivalent UI or API action.
395
+
394
396
  The following example shows a complete conversational flow:
395
397
 
396
398
  ```typescript
@@ -152,7 +152,7 @@ export const deleteFile = createTool({
152
152
 
153
153
  When the agent calls this tool, users see a card with the tool name, arguments, and Approve and Deny actions. The tool only executes after approval.
154
154
 
155
- Set `toolDisplay: 'text'` on an adapter to render tool calls as plain text instead of interactive cards. In `'hidden'` mode, `autoResumeSuspendedTools` can resume suspended tools when a later user message arrives on the same thread. This requires memory. Hidden mode only suppresses the approval buttons.
155
+ Set `toolDisplay: 'text'` on an adapter to render tool calls as plain text instead of interactive cards. In `'hidden'` mode, `autoResumeSuspendedTools` can resume data-bearing `suspend()` flows when a later user message arrives on the same thread. This requires memory. Hidden mode only suppresses approval buttons. It doesn't turn a message into consent. Tools that require approval remain suspended until an explicit approval or decline is submitted through a UI or API action.
156
156
 
157
157
  ## Reply formatting
158
158
 
@@ -182,6 +182,39 @@ In group conversations, Mastra prefixes each message with the sender's name and
182
182
  [Bob (@U456DEF)]: I have a question too.
183
183
  ```
184
184
 
185
+ ## Per-message Signal metadata
186
+
187
+ Use `signalMetadata` in a custom Channel handler to attach structured context to one inbound message. The metadata follows the message when it starts an idle run or joins an active run.
188
+
189
+ The following example attaches registered file IDs before calling the default handler:
190
+
191
+ ```typescript
192
+ import { Agent } from '@mastra/core/agent'
193
+ import { createSlackAdapter } from '@chat-adapter/slack'
194
+
195
+ export const yourAgent = new Agent({
196
+ id: 'your-agent',
197
+ name: 'Your Agent',
198
+ instructions: 'You are a helpful assistant.',
199
+ model: 'openai/gpt-5.6-sol',
200
+ channels: {
201
+ adapters: {
202
+ slack: createSlackAdapter(),
203
+ },
204
+ handlers: {
205
+ onDirectMessage: async (thread, message, defaultHandler, ctx) => {
206
+ ctx.signalMetadata.attachmentIds = ['file-1']
207
+ await defaultHandler(thread, message)
208
+ },
209
+ },
210
+ },
211
+ })
212
+ ```
213
+
214
+ Add only JSON-serializable, non-sensitive values. Signal metadata may be stored in memory or sent through a shared publish-subscribe transport. It isn't added to the model prompt.
215
+
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
+
185
218
  ## Multimodal content
186
219
 
187
220
  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:
@@ -56,6 +56,27 @@ await run.resume({
56
56
  await weatherTool.execute({ location: 'London' }, { requestContext })
57
57
  ```
58
58
 
59
+ ### Using runtime-only keys
60
+
61
+ When you provide a type or `requestContextSchema`, the `get`, `set`, `has`, and `delete` methods only accept declared keys. This catches misspelled keys and keeps declared values typed.
62
+
63
+ Use `getRaw`, `setRaw`, `hasRaw`, and `deleteRaw` for infrastructure or middleware keys that aren't part of the schema. Raw values use the `unknown` type, so narrow them before use.
64
+
65
+ ```typescript
66
+ const requestContext = new RequestContext<{ userId: string }>()
67
+
68
+ requestContext.set('userId', 'user-123')
69
+ requestContext.setRaw('session.cache', { hits: 0 })
70
+
71
+ const cache = requestContext.getRaw('session.cache')
72
+
73
+ if (typeof cache === 'object' && cache !== null && 'hits' in cache) {
74
+ console.log(cache.hits)
75
+ }
76
+ ```
77
+
78
+ Prefer schema-declared keys for application data. Use the raw methods only when a key must remain outside the request context schema.
79
+
59
80
  ### Setting values based on request headers
60
81
 
61
82
  You can populate `requestContext` in a runtime server middleware by extracting information from the request. In this example, the `temperature-unit` is set based on the Cloudflare `CF-IPCountry` header to ensure responses match the user's locale.
@@ -407,8 +407,9 @@ PostgreSQL storage creates composite indexes during initialization for common qu
407
407
  - `mastra_ai_spans_name_startedat_idx`: (name, startedAt DESC)
408
408
  - `mastra_ai_spans_scope_startedat_idx`: (scope, startedAt DESC)
409
409
  - `mastra_scores_trace_id_span_id_created_at_idx`: (traceId, spanId, createdAt DESC)
410
+ - `mastra_workflow_snapshot_name_createdat_idx`: (workflow\_name, createdAt DESC)
410
411
 
411
- These indexes improve performance for filtered queries with sorting, including `dateRange` filters on message queries.
412
+ These indexes improve performance for filtered queries with sorting, including `dateRange` filters on message queries and Studio's workflow runs-list.
412
413
 
413
414
  ### Configuring Indexes
414
415
 
@@ -6,13 +6,13 @@ Mastra supports OpenTelemetry (OTEL) through an exporter for sending traces and
6
6
 
7
7
  ## Exporter
8
8
 
9
- The OpenTelemetry exporter sends your traces and logs using standardized [OpenTelemetry Semantic Conventions for GenAI](https://opentelemetry.io/docs/specs/semconv/gen-ai/). This ensures broad compatibility with platforms like Datadog, New Relic, SigNoz, MLflow, Latitude, Dash0, Traceloop, Laminar, telemetry.dev, and more.
9
+ The OpenTelemetry exporter sends your traces and logs using standardized [OpenTelemetry Semantic Conventions for GenAI](https://opentelemetry.io/docs/specs/semconv/gen-ai/). This ensures broad compatibility with platforms like Datadog, New Relic, Sentry, SigNoz, MLflow, Latitude, Dash0, Traceloop, Laminar, telemetry.dev, and more.
10
10
 
11
11
  ### Installation
12
12
 
13
13
  Each provider requires specific protocol packages. Install the base exporter plus the protocol package for your provider:
14
14
 
15
- #### For HTTP/Protobuf Providers (SigNoz, New Relic, Laminar, MLflow, Latitude, telemetry.dev)
15
+ #### For HTTP/Protobuf Providers (SigNoz, New Relic, Sentry, Laminar, MLflow, Latitude, telemetry.dev)
16
16
 
17
17
  **npm**:
18
18
 
@@ -104,6 +104,38 @@ All providers support zero-config setup via environment variables. Set the appro
104
104
 
105
105
  ### Provider configurations
106
106
 
107
+ #### Sentry
108
+
109
+ [Sentry](https://sentry.io/) accepts OpenTelemetry traces and logs through its OTLP endpoints. In Sentry, open [**Project Settings** > **Client Keys (DSN)**](https://sentry.io/settings/projects/) and copy the OTLP traces endpoint and authentication header. Add both values to your environment:
110
+
111
+ ```bash
112
+ SENTRY_OTLP_ENDPOINT=https://o000000.ingest.sentry.io/api/0000000/integration/otlp/v1/traces
113
+ SENTRY_OTLP_AUTH_HEADER="sentry sentry_key=..."
114
+ ```
115
+
116
+ Use the `custom` provider with HTTP/Protobuf:
117
+
118
+ ```typescript
119
+ new OtelExporter({
120
+ provider: {
121
+ custom: {
122
+ endpoint: process.env.SENTRY_OTLP_ENDPOINT!,
123
+ protocol: 'http/protobuf',
124
+ headers: {
125
+ 'x-sentry-auth': process.env.SENTRY_OTLP_AUTH_HEADER!,
126
+ },
127
+ },
128
+ },
129
+ })
130
+ ```
131
+
132
+ See [Sentry's OTLP documentation](https://docs.sentry.io/concepts/otlp/) for endpoint setup, supported signals, and current ingestion limits.
133
+
134
+ Choose an exporter based on your setup:
135
+
136
+ - `OtelExporter`: Sends vendor-neutral traces and logs over OTLP. Use it with an existing OpenTelemetry pipeline or when you want backend portability.
137
+ - [`SentryExporter`](https://mastra.ai/integrations/observability/sentry): Uses the Sentry SDK to map Mastra span types to Sentry operations, add AI monitoring attributes, and capture span errors as Sentry issues.
138
+
107
139
  #### MLflow
108
140
 
109
141
  [MLflow](https://mlflow.org/docs/latest/genai/tracing/integrations/listing/mastra) supports native Mastra tracing through its OTLP endpoint at `/v1/traces`. Use the `custom` provider with HTTP/Protobuf and include the experiment header so traces are routed to the correct MLflow experiment:
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Model Providers
4
4
 
5
- Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to 5698 models from 172 providers through a single API.
5
+ Mastra provides a unified interface for working with LLMs across multiple providers, giving you access to 5742 models from 172 providers through a single API.
6
6
 
7
7
  ## Features
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ![Abacus logo](https://models.dev/logos/abacus.svg)Abacus
4
4
 
5
- Access 95 Abacus models through Mastra's model router. Authentication is handled automatically using the `ABACUS_API_KEY` environment variable.
5
+ Access 108 Abacus models through Mastra's model router. Authentication is handled automatically using the `ABACUS_API_KEY` environment variable.
6
6
 
7
7
  Learn more in the [Abacus documentation](https://abacus.ai).
8
8
 
@@ -45,6 +45,7 @@ for await (const chunk of stream) {
45
45
  | `abacus/claude-opus-4-6` | 1.0M | | | | | | $5 | $25 |
46
46
  | `abacus/claude-opus-4-7` | 1.0M | | | | | | $5 | $25 |
47
47
  | `abacus/claude-opus-4-8` | 1.0M | | | | | | $5 | $25 |
48
+ | `abacus/claude-opus-5` | 1.0M | | | | | | $5 | $25 |
48
49
  | `abacus/claude-sonnet-4-20250514` | 200K | | | | | | $3 | $15 |
49
50
  | `abacus/claude-sonnet-4-5-20250929` | 200K | | | | | | $3 | $15 |
50
51
  | `abacus/claude-sonnet-4-6` | 1.0M | | | | | | $3 | $15 |
@@ -59,12 +60,17 @@ for await (const chunk of stream) {
59
60
  | `abacus/gemini-2.5-flash-image` | 33K | | | | | | $0.30 | $30 |
60
61
  | `abacus/gemini-2.5-pro` | 1.0M | | | | | | $1 | $10 |
61
62
  | `abacus/gemini-3-flash-preview` | 1.0M | | | | | | $0.50 | $3 |
63
+ | `abacus/gemini-3-pro-image` | 66K | | | | | | $2 | $12 |
62
64
  | `abacus/gemini-3-pro-image-preview` | 66K | | | | | | $2 | $12 |
65
+ | `abacus/gemini-3.1-flash-image` | 1.0M | | | | | | $0.50 | $3 |
63
66
  | `abacus/gemini-3.1-flash-image-preview` | 1.0M | | | | | | $0.50 | $3 |
64
67
  | `abacus/gemini-3.1-flash-lite` | 1.0M | | | | | | $0.25 | $2 |
65
68
  | `abacus/gemini-3.1-flash-lite-preview` | 1.0M | | | | | | $0.25 | $2 |
66
69
  | `abacus/gemini-3.1-pro-preview` | 1.0M | | | | | | $2 | $12 |
67
70
  | `abacus/gemini-3.5-flash` | 1.0M | | | | | | $2 | $9 |
71
+ | `abacus/gemini-3.5-flash-lite` | 1.0M | | | | | | $0.30 | $3 |
72
+ | `abacus/gemini-3.6-flash` | 1.0M | | | | | | $2 | $8 |
73
+ | `abacus/gemini-3.7-flash` | 1.0M | | | | | | $0.75 | $4 |
68
74
  | `abacus/google/gemma-4-31b-it` | 262K | | | | | | $0.14 | $0.40 |
69
75
  | `abacus/gpt-4.1` | 1.0M | | | | | | $2 | $8 |
70
76
  | `abacus/gpt-4.1-mini` | 1.0M | | | | | | $0.40 | $2 |
@@ -98,6 +104,7 @@ for await (const chunk of stream) {
98
104
  | `abacus/grok-4-fast-non-reasoning` | 2.0M | | | | | | $0.20 | $0.50 |
99
105
  | `abacus/grok-4.3` | 1.0M | | | | | | $1 | $3 |
100
106
  | `abacus/grok-4.5` | 500K | | | | | | $2 | $6 |
107
+ | `abacus/grok-4.6` | 500K | | | | | | $2 | $6 |
101
108
  | `abacus/grok-code-fast-1` | 256K | | | | | | $0.20 | $2 |
102
109
  | `abacus/kimi-k2-turbo-preview` | 256K | | | | | | $0.15 | $8 |
103
110
  | `abacus/kimi-k2.5` | 262K | | | | | | $0.60 | $3 |
@@ -110,7 +117,10 @@ for await (const chunk of stream) {
110
117
  | `abacus/MiniMaxAI/MiniMax-M2.7` | 205K | | | | | | $0.30 | $1 |
111
118
  | `abacus/MiniMaxAI/MiniMax-M3` | 1.0M | | | | | | $0.30 | $1 |
112
119
  | `abacus/moonshotai/Kimi-K2.6` | 262K | | | | | | $0.95 | $4 |
120
+ | `abacus/moonshotai/Kimi-K2.7-Code` | 262K | | | | | | $0.95 | $4 |
121
+ | `abacus/moonshotai/Kimi-K3` | 1.0M | | | | | | $3 | $15 |
113
122
  | `abacus/muse-spark-1.1` | 1.0M | | | | | | $1 | $4 |
123
+ | `abacus/muse-spark-1.2` | 1.0M | | | | | | $1 | $4 |
114
124
  | `abacus/o3` | 200K | | | | | | $2 | $8 |
115
125
  | `abacus/o3-mini` | 200K | | | | | | $1 | $4 |
116
126
  | `abacus/o3-pro` | 200K | | | | | | $20 | $40 |
@@ -124,7 +134,10 @@ for await (const chunk of stream) {
124
134
  | `abacus/Qwen/Qwen3.6-27B` | 262K | | | | | | $0.32 | $3 |
125
135
  | `abacus/Qwen/QwQ-32B` | 33K | | | | | | $0.40 | $0.40 |
126
136
  | `abacus/qwen3-max` | 131K | | | | | | $1 | $6 |
137
+ | `abacus/qwen3.7-max` | 1.0M | | | | | | $3 | $8 |
138
+ | `abacus/qwen3.8-max` | 1.0M | | | | | | $2 | $6 |
127
139
  | `abacus/route-llm` | 128K | | | | | | $3 | $15 |
140
+ | `abacus/thinkingmachines/Inkling` | 262K | | | | | | $4 | $9 |
128
141
  | `abacus/zai-org/GLM-4.5` | 131K | | | | | | $0.60 | $2 |
129
142
  | `abacus/zai-org/GLM-4.6` | 203K | | | | | | $0.60 | $2 |
130
143
  | `abacus/zai-org/GLM-4.7` | 205K | | | | | | $0.60 | $2 |
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ![Cortecs logo](https://models.dev/logos/cortecs.svg)Cortecs
4
4
 
5
- Access 104 Cortecs models through Mastra's model router. Authentication is handled automatically using the `CORTECS_API_KEY` environment variable.
5
+ Access 107 Cortecs models through Mastra's model router. Authentication is handled automatically using the `CORTECS_API_KEY` environment variable.
6
6
 
7
7
  Learn more in the [Cortecs documentation](https://cortecs.ai).
8
8
 
@@ -57,8 +57,10 @@ for await (const chunk of stream) {
57
57
  | `cortecs/gemini-2.5-flash` | 1.0M | | | | | | $0.30 | $2 |
58
58
  | `cortecs/gemini-2.5-pro` | 1.0M | | | | | | $1 | $10 |
59
59
  | `cortecs/gemini-3.1-flash-lite` | 1.0M | | | | | | $0.27 | $2 |
60
- | `cortecs/gemini-3.5-flash` | 1.0M | | | | | | $1 | $9 |
60
+ | `cortecs/gemini-3.5-flash` | 1.0M | | | | | | $2 | $10 |
61
61
  | `cortecs/gemini-3.5-flash-lite` | 1.0M | | | | | | $0.33 | $3 |
62
+ | `cortecs/gemini-3.6-flash` | 1.0M | | | | | | $0.75 | $4 |
63
+ | `cortecs/gemini-3.7-flash` | 1.0M | | | | | | $0.75 | $4 |
62
64
  | `cortecs/gemma-3-27b-it` | 131K | | | | | | $0.10 | $0.30 |
63
65
  | `cortecs/gemma-4-26b-a4b-it` | 262K | | | | | | $0.11 | $0.56 |
64
66
  | `cortecs/gemma-4-31b-it` | 262K | | | | | | $0.22 | $0.39 |
@@ -137,6 +139,7 @@ for await (const chunk of stream) {
137
139
  | `cortecs/qwen3.5-9b` | 262K | | | | | | $0.11 | $0.17 |
138
140
  | `cortecs/qwen3.6-27b` | 262K | | | | | | $0.45 | $3 |
139
141
  | `cortecs/qwen3.6-35b-a3b` | 262K | | | | | | $0.17 | $0.56 |
142
+ | `cortecs/qwen3.8-2.4t-a95b` | 262K | | | | | | $3 | $6 |
140
143
  | `cortecs/qwen3guard-gen-0.6b` | 32K | | | | | | — | — |
141
144
  | `cortecs/qwen3guard-gen-8b` | 32K | | | | | | — | — |
142
145
  | `cortecs/voxtral-small-2507` | 32K | | | | | | $0.11 | $0.33 |
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ![Hugging Face logo](https://models.dev/logos/huggingface.svg)Hugging Face
4
4
 
5
- Access 64 Hugging Face models through Mastra's model router. Authentication is handled automatically using the `HF_TOKEN` environment variable.
5
+ Access 65 Hugging Face models through Mastra's model router. Authentication is handled automatically using the `HF_TOKEN` environment variable.
6
6
 
7
7
  Learn more in the [Hugging Face documentation](https://huggingface.co).
8
8
 
@@ -45,6 +45,7 @@ for await (const chunk of stream) {
45
45
  | `huggingface/deepseek-ai/DeepSeek-V4-Flash` | 1.0M | | | | | | $0.14 | $0.28 |
46
46
  | `huggingface/deepseek-ai/DeepSeek-V4-Flash-0731` | 1.0M | | | | | | $0.14 | $0.28 |
47
47
  | `huggingface/deepseek-ai/DeepSeek-V4-Pro` | 1.0M | | | | | | $0.43 | $0.87 |
48
+ | `huggingface/deepseek-ai/DeepSeek-V4-Pro-0813` | 1.0M | | | | | | $1 | $4 |
48
49
  | `huggingface/google/gemma-4-26B-A4B-it` | 262K | | | | | | $0.13 | $0.40 |
49
50
  | `huggingface/google/gemma-4-31B-it` | 262K | | | | | | $0.14 | $0.40 |
50
51
  | `huggingface/meta-llama/Llama-3.1-8B-Instruct` | 131K | | | | | | $0.06 | $0.06 |
@@ -39,17 +39,17 @@ for await (const chunk of stream) {
39
39
  | `hyper/deepseek-v4-flash` | 1.0M | | | | | | $0.20 | $0.40 |
40
40
  | `hyper/deepseek-v4-flash-0731` | 1.0M | | | | | | $0.20 | $0.40 |
41
41
  | `hyper/deepseek-v4-pro` | 1.0M | | | | | | $2 | $5 |
42
- | `hyper/gemma-4-26b-a4b-it` | 256K | | | | | | $0.13 | $0.42 |
42
+ | `hyper/gemma-4-26b-a4b-it` | 256K | | | | | | $0.12 | $0.42 |
43
43
  | `hyper/glm-5.1` | 203K | | | | | | $2 | $5 |
44
44
  | `hyper/glm-5.2` | 1.0M | | | | | | $1 | $4 |
45
- | `hyper/gpt-oss-120b` | 131K | | | | | | $0.19 | $0.70 |
46
- | `hyper/kimi-k2.5` | 262K | | | | | | $0.53 | $3 |
45
+ | `hyper/gpt-oss-120b` | 131K | | | | | | $0.18 | $0.71 |
46
+ | `hyper/kimi-k2.5` | 262K | | | | | | $0.56 | $3 |
47
47
  | `hyper/kimi-k2.6` | 262K | | | | | | $0.95 | $4 |
48
48
  | `hyper/kimi-k2.7-code` | 256K | | | | | | $0.95 | $4 |
49
49
  | `hyper/kimi-k3` | 1.0M | | | | | | $3 | $16 |
50
- | `hyper/llama-3.3-70b-instruct` | 128K | | | | | | $0.60 | $0.74 |
50
+ | `hyper/llama-3.3-70b-instruct` | 128K | | | | | | $0.61 | $0.84 |
51
51
  | `hyper/llama-4-maverick-17b-128e-instruct-fp8` | 430K | | | | | | $0.27 | $0.90 |
52
- | `hyper/minimax-m2.7` | 262K | | | | | | $0.47 | $2 |
52
+ | `hyper/minimax-m2.7` | 262K | | | | | | $0.43 | $2 |
53
53
  | `hyper/minimax-m3` | 512K | | | | | | $0.33 | $1 |
54
54
  | `hyper/qwen3-coder-480b-a35b-instruct-int4-mixed-ar` | 106K | | | | | | $0.45 | $2 |
55
55
  | `hyper/qwen3-next-80b-a3b-instruct` | 262K | | | | | | $0.12 | $1 |
@@ -40,7 +40,7 @@ for await (const chunk of stream) {
40
40
  | `kilo/~anthropic/claude-haiku-latest` | 200K | | | | | | $1 | $5 |
41
41
  | `kilo/~anthropic/claude-opus-latest` | 1.0M | | | | | | $5 | $25 |
42
42
  | `kilo/~anthropic/claude-sonnet-latest` | 1.0M | | | | | | $2 | $10 |
43
- | `kilo/~deepseek/deepseek-v4-flash-latest` | 1.0M | | | | | | $0.08 | $0.25 |
43
+ | `kilo/~deepseek/deepseek-v4-flash-latest` | 1.0M | | | | | | $0.08 | $0.16 |
44
44
  | `kilo/~google/gemini-flash-latest` | 1.0M | | | | | | $0.38 | $2 |
45
45
  | `kilo/~google/gemini-pro-latest` | 1.0M | | | | | | $2 | $12 |
46
46
  | `kilo/~moonshotai/kimi-latest` | 1.0M | | | | | | $3 | $14 |
@@ -106,7 +106,7 @@ for await (const chunk of stream) {
106
106
  | `kilo/deepseek/deepseek-v4-flash-0731` | 1.0M | | | | | | $0.14 | $0.28 |
107
107
  | `kilo/deepseek/deepseek-v4-flash:discounted` | 1.0M | | | | | | $0.14 | $0.28 |
108
108
  | `kilo/deepseek/deepseek-v4-pro` | 1.0M | | | | | | $2 | $3 |
109
- | `kilo/deepseek/deepseek-v4-pro-0813` | 1.0M | | | | | | $0.43 | $0.87 |
109
+ | `kilo/deepseek/deepseek-v4-pro-0813` | 1.0M | | | | | | $1 | $4 |
110
110
  | `kilo/deepseek/deepseek-v4-pro:discounted` | 1.0M | | | | | | $0.43 | $0.87 |
111
111
  | `kilo/google/gemini-2.5-flash` | 1.0M | | | | | | $0.30 | $3 |
112
112
  | `kilo/google/gemini-2.5-flash-image` | 33K | | | | | | $0.30 | $3 |
@@ -161,7 +161,7 @@ for await (const chunk of stream) {
161
161
  | `kilo/meta-llama/llama-3.2-1b-instruct` | 60K | | | | | | $0.03 | $0.20 |
162
162
  | `kilo/meta-llama/llama-3.2-3b-instruct` | 131K | | | | | | $0.05 | $0.33 |
163
163
  | `kilo/meta-llama/llama-3.3-70b-instruct` | 131K | | | | | | $0.10 | $0.32 |
164
- | `kilo/meta-llama/llama-4-maverick` | 1.0M | | | | | | $0.20 | $0.70 |
164
+ | `kilo/meta-llama/llama-4-maverick` | 128K | | | | | | $0.20 | $0.70 |
165
165
  | `kilo/meta-llama/llama-4-scout` | 328K | | | | | | $0.10 | $0.30 |
166
166
  | `kilo/meta-llama/llama-guard-4-12b` | 164K | | | | | | $0.18 | $0.18 |
167
167
  | `kilo/meta/muse-glimmer-30b` | 131K | | | | | | $0.30 | $1 |
@@ -360,7 +360,7 @@ for await (const chunk of stream) {
360
360
  | `kilo/stepfun/step-3.7-flash` | 256K | | | | | | $0.20 | $1 |
361
361
  | `kilo/stepfun/step-3.7-flash:free` | 262K | | | | | | — | — |
362
362
  | `kilo/tencent/hunyuan-a13b-instruct` | 131K | | | | | | $0.14 | $0.57 |
363
- | `kilo/tencent/hy3` | 262K | | | | | | $0.14 | $0.58 |
363
+ | `kilo/tencent/hy3` | 262K | | | | | | $0.13 | $0.53 |
364
364
  | `kilo/tencent/hy3-preview` | 262K | | | | | | $0.18 | $0.60 |
365
365
  | `kilo/tencent/hy3:free` | 262K | | | | | | — | — |
366
366
  | `kilo/thedrummer/cydonia-24b-v4.1` | 131K | | | | | | $0.30 | $0.50 |
@@ -391,7 +391,7 @@ for await (const chunk of stream) {
391
391
  | `kilo/z-ai/glm-5` | 205K | | | | | | $0.95 | $3 |
392
392
  | `kilo/z-ai/glm-5-turbo` | 203K | | | | | | $1 | $4 |
393
393
  | `kilo/z-ai/glm-5.1` | 203K | | | | | | $1 | $4 |
394
- | `kilo/z-ai/glm-5.2` | 262K | | | | | | $1 | $4 |
394
+ | `kilo/z-ai/glm-5.2` | 1.0M | | | | | | $1 | $4 |
395
395
  | `kilo/z-ai/glm-5v-turbo` | 203K | | | | | | $1 | $4 |
396
396
 
397
397
  ## Advanced configuration
@@ -168,7 +168,7 @@ for await (const chunk of stream) {
168
168
  | `merge-gateway/qwen/qwen3.5-122b-a10b` | 256K | | | | | | $0.12 | $0.92 |
169
169
  | `merge-gateway/qwen/qwen3.5-27b` | 256K | | | | | | $0.09 | $0.69 |
170
170
  | `merge-gateway/qwen/qwen3.5-35b-a3b` | 256K | | | | | | $0.06 | $0.46 |
171
- | `merge-gateway/qwen/qwen3.5-397b-a17b` | 131K | | | | | | $0.17 | $1 |
171
+ | `merge-gateway/qwen/qwen3.5-397b-a17b` | 256K | | | | | | $0.17 | $1 |
172
172
  | `merge-gateway/qwen/qwen3.5-9b` | 262K | | | | | | $0.09 | $0.13 |
173
173
  | `merge-gateway/qwen/qwen3.5-flash` | 1.0M | | | | | | $0.03 | $0.29 |
174
174
  | `merge-gateway/qwen/qwen3.5-plus` | 1.0M | | | | | | $0.12 | $0.69 |
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ![Ofox logo](https://models.dev/logos/ofox.svg)Ofox
4
4
 
5
- Access 76 Ofox models through Mastra's model router. Authentication is handled automatically using the `OFOX_API_KEY` environment variable.
5
+ Access 103 Ofox models through Mastra's model router. Authentication is handled automatically using the `OFOX_API_KEY` environment variable.
6
6
 
7
7
  Learn more in the [Ofox documentation](https://ofox.ai/docs).
8
8
 
@@ -43,10 +43,12 @@ for await (const chunk of stream) {
43
43
  | `ofox/anthropic/claude-opus-4.7` | 1.0M | | | | | | $5 | $25 |
44
44
  | `ofox/anthropic/claude-opus-4.8` | 1.0M | | | | | | $5 | $25 |
45
45
  | `ofox/anthropic/claude-opus-5` | 1.0M | | | | | | $5 | $25 |
46
+ | `ofox/anthropic/claude-sonnet-4.5` | 200K | | | | | | $3 | $15 |
46
47
  | `ofox/anthropic/claude-sonnet-4.6` | 1.0M | | | | | | $3 | $15 |
47
48
  | `ofox/anthropic/claude-sonnet-5` | 1.0M | | | | | | $2 | $10 |
48
49
  | `ofox/bailian/qwen-flash` | 1.0M | | | | | | $0.02 | $0.22 |
49
50
  | `ofox/bailian/qwen-max` | 33K | | | | | | $0.35 | $1 |
51
+ | `ofox/bailian/qwen-plus` | 1.0M | | | | | | $0.12 | $0.29 |
50
52
  | `ofox/bailian/qwen-turbo` | 128K | | | | | | $0.05 | $0.09 |
51
53
  | `ofox/bailian/qwen-vl-max` | 131K | | | | | | $0.23 | $0.58 |
52
54
  | `ofox/bailian/qwen3-coder-flash` | 1.0M | | | | | | $0.50 | $3 |
@@ -55,6 +57,7 @@ for await (const chunk of stream) {
55
57
  | `ofox/bailian/qwen3-max` | 262K | | | | | | $0.36 | $1 |
56
58
  | `ofox/bailian/qwen3.5-122b-a10b` | 256K | | | | | | $0.29 | $2 |
57
59
  | `ofox/bailian/qwen3.5-27b` | 262K | | | | | | $0.29 | $2 |
60
+ | `ofox/bailian/qwen3.5-35b-a3b` | 262K | | | | | | $0.29 | $2 |
58
61
  | `ofox/bailian/qwen3.5-397b-a17b` | 256K | | | | | | $0.55 | $4 |
59
62
  | `ofox/bailian/qwen3.5-flash` | 1.0M | | | | | | $0.10 | $0.40 |
60
63
  | `ofox/bailian/qwen3.5-plus` | 1.0M | | | | | | $0.40 | $2 |
@@ -68,6 +71,7 @@ for await (const chunk of stream) {
68
71
  | `ofox/deepseek/deepseek-v3.2` | 128K | | | | | | $0.29 | $0.43 |
69
72
  | `ofox/deepseek/deepseek-v4-flash` | 1.0M | | | | | | $0.14 | $0.28 |
70
73
  | `ofox/deepseek/deepseek-v4-pro` | 1.0M | | | | | | $0.45 | $0.88 |
74
+ | `ofox/deepseek/deepseek-v4-pro-0813` | 1.0M | | | | | | $0.45 | $0.88 |
71
75
  | `ofox/google/gemini-2.5-flash` | 1.0M | | | | | | $0.30 | $3 |
72
76
  | `ofox/google/gemini-2.5-flash-lite` | 1.0M | | | | | | $0.10 | $0.40 |
73
77
  | `ofox/google/gemini-2.5-pro` | 1.0M | | | | | | $1 | $10 |
@@ -77,7 +81,15 @@ for await (const chunk of stream) {
77
81
  | `ofox/google/gemini-3.5-flash` | 1.0M | | | | | | $2 | $9 |
78
82
  | `ofox/google/gemini-3.5-flash-lite` | 1.0M | | | | | | $0.30 | $3 |
79
83
  | `ofox/google/gemini-3.6-flash` | 1.0M | | | | | | $2 | $8 |
84
+ | `ofox/minimax/m2-her` | 200K | | | | | | $0.30 | $1 |
85
+ | `ofox/minimax/minimax-m2` | 197K | | | | | | $0.30 | $1 |
86
+ | `ofox/minimax/minimax-m2.1` | 205K | | | | | | $0.30 | $1 |
87
+ | `ofox/minimax/minimax-m2.1-lightning` | 205K | | | | | | $0.30 | $2 |
88
+ | `ofox/minimax/minimax-m2.5` | 205K | | | | | | $0.30 | $1 |
89
+ | `ofox/minimax/minimax-m2.5-lightning` | 205K | | | | | | $0.30 | $2 |
80
90
  | `ofox/minimax/minimax-m2.7` | 205K | | | | | | $0.30 | $1 |
91
+ | `ofox/minimax/minimax-m2.7-highspeed` | 205K | | | | | | $0.60 | $2 |
92
+ | `ofox/minimax/minimax-m3` | 512K | | | | | | $0.60 | $2 |
81
93
  | `ofox/moonshotai/kimi-k2.5` | 262K | | | | | | $0.60 | $3 |
82
94
  | `ofox/moonshotai/kimi-k2.6` | 262K | | | | | | $0.95 | $4 |
83
95
  | `ofox/moonshotai/kimi-k2.7-code` | 262K | | | | | | $0.95 | $4 |
@@ -89,11 +101,14 @@ for await (const chunk of stream) {
89
101
  | `ofox/openai/gpt-4o-mini` | 128K | | | | | | $0.15 | $0.60 |
90
102
  | `ofox/openai/gpt-5` | 400K | | | | | | $1 | $10 |
91
103
  | `ofox/openai/gpt-5-mini` | 256K | | | | | | $0.25 | $2 |
104
+ | `ofox/openai/gpt-5-nano` | 400K | | | | | | $0.05 | $0.40 |
92
105
  | `ofox/openai/gpt-5.1` | 400K | | | | | | $1 | $10 |
93
106
  | `ofox/openai/gpt-5.1-codex-max` | 256K | | | | | | $1 | $10 |
94
107
  | `ofox/openai/gpt-5.1-codex-mini` | 256K | | | | | | $0.25 | $2 |
95
108
  | `ofox/openai/gpt-5.2` | 400K | | | | | | $2 | $14 |
96
109
  | `ofox/openai/gpt-5.2-codex` | 400K | | | | | | $2 | $14 |
110
+ | `ofox/openai/gpt-5.3-codex` | 400K | | | | | | $2 | $14 |
111
+ | `ofox/openai/gpt-5.4` | 1.1M | | | | | | $3 | $15 |
97
112
  | `ofox/openai/gpt-5.4-mini` | 400K | | | | | | $0.75 | $5 |
98
113
  | `ofox/openai/gpt-5.4-nano` | 400K | | | | | | $0.20 | $1 |
99
114
  | `ofox/openai/gpt-5.4-pro` | 1.1M | | | | | | $30 | $180 |
@@ -101,6 +116,18 @@ for await (const chunk of stream) {
101
116
  | `ofox/openai/gpt-5.6-luna` | 1.1M | | | | | | $0.20 | $1 |
102
117
  | `ofox/openai/gpt-5.6-sol` | 1.1M | | | | | | $5 | $30 |
103
118
  | `ofox/openai/gpt-5.6-terra` | 1.1M | | | | | | $2 | $12 |
119
+ | `ofox/volcengine/doubao-seed-1-6` | 256K | | | | | | $0.12 | $0.29 |
120
+ | `ofox/volcengine/doubao-seed-1-6-flash` | 256K | | | | | | $0.03 | $0.22 |
121
+ | `ofox/volcengine/doubao-seed-1-6-vision` | 256K | | | | | | $0.12 | $1 |
122
+ | `ofox/volcengine/doubao-seed-1-8` | 256K | | | | | | $0.12 | $0.29 |
123
+ | `ofox/volcengine/doubao-seed-2.0-code` | 256K | | | | | | $0.67 | $3 |
124
+ | `ofox/volcengine/doubao-seed-2.0-lite` | 256K | | | | | | $0.13 | $0.76 |
125
+ | `ofox/volcengine/doubao-seed-2.0-mini` | 256K | | | | | | $0.06 | $0.56 |
126
+ | `ofox/volcengine/doubao-seed-2.0-pro` | 256K | | | | | | $0.67 | $3 |
127
+ | `ofox/volcengine/doubao-seed-2.1-pro` | 256K | | | | | | $0.88 | $4 |
128
+ | `ofox/volcengine/doubao-seed-2.1-turbo` | 256K | | | | | | $0.44 | $2 |
129
+ | `ofox/volcengine/doubao-seed-character` | 256K | | | | | | $0.18 | $0.88 |
130
+ | `ofox/volcengine/doubao-seed-evolving` | 256K | | | | | | $0.88 | $4 |
104
131
  | `ofox/x-ai/grok-4.1-fast` | 2.0M | | | | | | $0.20 | $0.50 |
105
132
  | `ofox/x-ai/grok-4.20` | 2.0M | | | | | | $4 | $12 |
106
133
  | `ofox/x-ai/grok-4.3` | 1.0M | | | | | | $1 | $3 |
@@ -79,10 +79,16 @@ Registers a callback to receive events published to a topic. When `options.group
79
79
 
80
80
  Pass `options.batch` to opt in to batched delivery. The callback signature is unchanged: a batch of N events is delivered as N consecutive `cb(event, ack, nack)` calls in publish order. Batching is honored only when the backend's [`supportsNativeBatching`](#properties) is `true`. Other backends ignore the option and deliver events one at a time.
81
81
 
82
+ Set `options.startFrom` to `"latest"` to receive only events published after a new consumer group is created. The default, `"earliest"`, includes retained events. Existing consumer groups keep their current checkpoint.
83
+
82
84
  ```typescript
83
- await pubsub.subscribe('my-topic', (event, ack, nack) => {
84
- console.log(event)
85
- })
85
+ await pubsub.subscribe(
86
+ 'my-topic',
87
+ (event, ack, nack) => {
88
+ console.log(event)
89
+ },
90
+ { startFrom: 'latest' },
91
+ )
86
92
  ```
87
93
 
88
94
  #### `unsubscribe(topic, cb)`
@@ -151,6 +157,8 @@ await pubsub.subscribeFromOffset('my-topic', 42, event => {
151
157
 
152
158
  **supportsNativeBatching** (`boolean`): Whether the implementation honors options.batch on subscribe(). Defaults to false. Backends that integrate batching internally override this and return true.
153
159
 
160
+ **supportsOffsets** (`boolean`): Whether subscribeFromOffset() honors numeric offsets. Defaults to false. A non-zero offset on an unsupported implementation falls back to replay subscription and emits a diagnostic warning when a logger is configured.
161
+
154
162
  ## Types
155
163
 
156
164
  ### `Event`
@@ -175,6 +183,8 @@ await pubsub.subscribeFromOffset('my-topic', 42, event => {
175
183
 
176
184
  **batch** (`SubscribeBatchOptions`): Opt in to batched delivery for this subscription. When omitted, events are delivered one at a time. Honored only by backends where supportsNativeBatching is true.
177
185
 
186
+ **startFrom** (`"earliest" | "latest"`): Starting position used when a backend creates a new consumer group. "earliest" includes retained events. "latest" receives only events published after group creation. Existing groups keep their checkpoint. (Default: `"earliest"`)
187
+
178
188
  ### `SubscribeBatchOptions`
179
189
 
180
190
  Per-subscription batching policy. The callback signature doesn't change. A batch of N events becomes N consecutive callback invocations in publish order.
@@ -46,6 +46,8 @@ const pubsub = withCaching(new EventEmitterPubSub(), new InMemoryServerCache())
46
46
 
47
47
  **supportsNativeBatching** (`boolean`): Mirrors the inner pub/sub. Returns true only when the wrapped implementation supports batching.
48
48
 
49
+ **supportsOffsets** (`boolean`): Returns true. Cached events have sequential indexes that support numeric offset replay.
50
+
49
51
  ## Methods
50
52
 
51
53
  `CachingPubSub` implements the [`PubSub`](https://mastra.ai/reference/pubsub/base) contract. It overrides the replay methods to read cached events. The methods below describe the caching behavior.
@@ -51,6 +51,8 @@ const pubsub = new EventEmitterPubSub(undefined, { logger })
51
51
 
52
52
  **supportsNativeBatching** (`boolean`): Returns true. Subscribers can opt in to batched delivery with options.batch.
53
53
 
54
+ **supportsOffsets** (`boolean`): Returns false. The in-memory emitter does not retain indexed event history.
55
+
54
56
  ## Methods
55
57
 
56
58
  `EventEmitterPubSub` implements the [`PubSub`](https://mastra.ai/reference/pubsub/base) contract. The methods below have behavior specific to this implementation.
@@ -77,6 +77,8 @@ export const mastra = new Mastra({
77
77
 
78
78
  **supportedModes** (`ReadonlyArray<"pull" | "push">`): Returns \["pull"].
79
79
 
80
+ **supportsOffsets** (`boolean`): Returns false. Redis stream anchors support start positions, but not the numeric indexes used by subscribeFromOffset().
81
+
80
82
  ## Methods
81
83
 
82
84
  `RedisStreamsPubSub` implements the [`PubSub`](https://mastra.ai/reference/pubsub/base) contract. The methods below have behavior specific to this implementation.
@@ -85,10 +87,16 @@ export const mastra = new Mastra({
85
87
 
86
88
  Subscribes to a topic. With `options.group`, members of the group share events through a Redis consumer group. Without a group, the subscriber receives every event through a private consumer group.
87
89
 
90
+ Set `options.startFrom` to `"latest"` to skip retained entries when Redis creates the consumer group. The default, `"earliest"`, reads retained entries first. This option doesn't reset an existing group's checkpoint.
91
+
88
92
  ```typescript
89
- await pubsub.subscribe('workflow.events', (event, ack, nack) => {
90
- console.log(event)
91
- })
93
+ await pubsub.subscribe(
94
+ 'workflow.events',
95
+ (event, ack, nack) => {
96
+ console.log(event)
97
+ },
98
+ { group: 'live-workers', startFrom: 'latest' },
99
+ )
92
100
  ```
93
101
 
94
102
  ### `flush()`
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @mastra/mcp-docs-server
2
2
 
3
+ ## 1.2.17-alpha.5
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`d8308a2`](https://github.com/mastra-ai/mastra/commit/d8308a2be3c07e777393d1017a381dcae3890d30), [`7aad631`](https://github.com/mastra-ai/mastra/commit/7aad631b43bc10db77d5b8c66b200d7a49d18bf2), [`1794a79`](https://github.com/mastra-ai/mastra/commit/1794a79178c418004a7261b1ad9114066f7ef01d)]:
8
+ - @mastra/core@1.60.0-alpha.3
9
+
10
+ ## 1.2.17-alpha.4
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies [[`7e096f0`](https://github.com/mastra-ai/mastra/commit/7e096f02f0dddbf09b85d306458351245ed2f886), [`8f0a332`](https://github.com/mastra-ai/mastra/commit/8f0a3321bf180368d76fe7b36aa1a8f60f00b6de), [`b098de9`](https://github.com/mastra-ai/mastra/commit/b098de9d7cb9f672e0883a5c716465a3a689693d), [`ef6e295`](https://github.com/mastra-ai/mastra/commit/ef6e295b59bc25a5b61b633a89c97bcfce9fb465), [`208e1b3`](https://github.com/mastra-ai/mastra/commit/208e1b39f30f4b386e494394e9d71d96f0f90241), [`c938d34`](https://github.com/mastra-ai/mastra/commit/c938d34739936c8ecbabd67ad6a4a4396f41c4c6), [`1d9a0ea`](https://github.com/mastra-ai/mastra/commit/1d9a0ea4a9901baee6cd56737243bd6d1f631ac0), [`3667679`](https://github.com/mastra-ai/mastra/commit/3667679db057edfb086846d13369fdda4902ad65), [`49696e8`](https://github.com/mastra-ai/mastra/commit/49696e8e42f870674a0a58f5abcd22cc54dd2864), [`512100a`](https://github.com/mastra-ai/mastra/commit/512100a7d8b7e9c920f2590c6b3612f5de0d3cff), [`9ef432b`](https://github.com/mastra-ai/mastra/commit/9ef432b6faa534b57b0d182a610e13dd9a7123ff), [`b9cf308`](https://github.com/mastra-ai/mastra/commit/b9cf30846f97f99ac1906ee8a68f4f2d117b0378)]:
15
+ - @mastra/core@1.60.0-alpha.2
16
+
3
17
  ## 1.2.17-alpha.2
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.17-alpha.3",
3
+ "version": "1.2.17-alpha.5",
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.60.0-alpha.1",
31
+ "@mastra/core": "1.60.0-alpha.3",
32
32
  "@mastra/mcp": "^1.16.0"
33
33
  },
34
34
  "devDependencies": {
@@ -45,9 +45,9 @@
45
45
  "tsx": "^4.23.1",
46
46
  "typescript": "^6.0.3",
47
47
  "vitest": "4.1.10",
48
+ "@internal/lint": "0.0.123",
48
49
  "@internal/types-builder": "0.0.98",
49
- "@mastra/core": "1.60.0-alpha.1",
50
- "@internal/lint": "0.0.123"
50
+ "@mastra/core": "1.60.0-alpha.3"
51
51
  },
52
52
  "homepage": "https://mastra.ai",
53
53
  "repository": {