@ai-sdk/mcp 2.0.0-beta.6 → 2.0.0-beta.67

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,495 @@
1
1
  # @ai-sdk/mcp
2
2
 
3
+ ## 2.0.0-beta.67
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [0416e3e]
8
+ - @ai-sdk/provider@4.0.0-beta.20
9
+ - @ai-sdk/provider-utils@5.0.0-beta.50
10
+
11
+ ## 2.0.0-beta.66
12
+
13
+ ### Patch Changes
14
+
15
+ - b8396f0: trigger initial beta release
16
+ - Updated dependencies [b8396f0]
17
+ - @ai-sdk/provider-utils@5.0.0-beta.49
18
+ - @ai-sdk/provider@4.0.0-beta.19
19
+
20
+ ## 2.0.0-canary.65
21
+
22
+ ### Patch Changes
23
+
24
+ - b29e087: fix (mcp): handle SSE messages without explicit event fields
25
+
26
+ ## 2.0.0-canary.64
27
+
28
+ ### Patch Changes
29
+
30
+ - 024a6b4: fix(mcp): validate oauth metadata issuer during discovery
31
+
32
+ ## 2.0.0-canary.63
33
+
34
+ ### Patch Changes
35
+
36
+ - 2a150f8: fix(mcp): lock first sse endpoint received via event
37
+ - b44b051: fix(mcp): prevent prototype-named tools from bypassing the `schemas` allowlist
38
+
39
+ When using `client.tools({ schemas })` to expose only an explicitly allowed
40
+ subset of an MCP server's tools, the allowlist check used the `in` operator,
41
+ which also matches inherited `Object.prototype` properties. A server-advertised
42
+ tool named `constructor`, `toString`, `__proto__`, etc. would pass the check
43
+ even though the developer never defined it in `schemas`, and was then exposed to
44
+ the model and executable. The check now uses `Object.hasOwn`, so only
45
+ explicitly defined tools are returned.
46
+
47
+ - Updated dependencies [aeda373]
48
+ - Updated dependencies [375fdd7]
49
+ - Updated dependencies [b4507d5]
50
+ - @ai-sdk/provider-utils@5.0.0-canary.48
51
+
52
+ ## 2.0.0-canary.62
53
+
54
+ ### Patch Changes
55
+
56
+ - e33ad0b: fix(mcp): add optional hook to validate authorization servers
57
+ - 3e0b82f: fix(mcp): support official sdk protocol version negotiation
58
+
59
+ ## 2.0.0-canary.61
60
+
61
+ ### Patch Changes
62
+
63
+ - Updated dependencies [bae5e2b]
64
+ - @ai-sdk/provider-utils@5.0.0-canary.47
65
+
66
+ ## 2.0.0-canary.60
67
+
68
+ ### Patch Changes
69
+
70
+ - f0c6770: fix(mcp): prevent mcp oauth credential exfiltration during rediscovery
71
+
72
+ ## 2.0.0-canary.59
73
+
74
+ ### Patch Changes
75
+
76
+ - Updated dependencies [ce769dd]
77
+ - @ai-sdk/provider@4.0.0-canary.18
78
+ - @ai-sdk/provider-utils@5.0.0-canary.46
79
+
80
+ ## 2.0.0-canary.58
81
+
82
+ ### Patch Changes
83
+
84
+ - Updated dependencies [ee798eb]
85
+ - Updated dependencies [daf6637]
86
+ - @ai-sdk/provider-utils@5.0.0-canary.45
87
+
88
+ ## 2.0.0-canary.57
89
+
90
+ ### Patch Changes
91
+
92
+ - 78e0023: fix(mcp): await addClientAuthentication in token exchange and refresh
93
+
94
+ ## 2.0.0-canary.56
95
+
96
+ ### Patch Changes
97
+
98
+ - dcefad3: fix(mcp): respond to ping requests with an empty result per JSON-RPC spec (closes #6282)
99
+
100
+ ## 2.0.0-canary.55
101
+
102
+ ### Patch Changes
103
+
104
+ - f7bc0b4: feat(mcp): expose `statusCode`, `url`, and `responseBody` on `MCPClientError` for HTTP transport failures
105
+
106
+ `MCPClientError` now carries structured HTTP context when it originates from the
107
+ streamable HTTP transport. This lets downstream consumers (e.g. agent frameworks
108
+ that need to decide whether to fall back from streamable HTTP to legacy SSE
109
+ transport per the MCP spec) branch on the actual response status without parsing
110
+ the error message string.
111
+
112
+ Fields are optional — they remain `undefined` for stdio transport errors and for
113
+ non-response failures (network errors, aborts).
114
+
115
+ ## 2.0.0-canary.54
116
+
117
+ ### Patch Changes
118
+
119
+ - Updated dependencies [6c93e36]
120
+ - Updated dependencies [f617ac2]
121
+ - @ai-sdk/provider-utils@5.0.0-canary.44
122
+
123
+ ## 2.0.0-canary.53
124
+
125
+ ### Patch Changes
126
+
127
+ - 6c17a9f: fix(mcp): deduplicate auth refresh on http transport
128
+
129
+ ## 2.0.0-canary.52
130
+
131
+ ### Patch Changes
132
+
133
+ - 7fc6bd6: Raise minimum supported Node.js version to 22. Supported versions: 22, 24, and 26.
134
+ - Updated dependencies [7fc6bd6]
135
+ - @ai-sdk/provider-utils@5.0.0-canary.43
136
+ - @ai-sdk/provider@4.0.0-canary.17
137
+
138
+ ## 2.0.0-canary.51
139
+
140
+ ### Patch Changes
141
+
142
+ - b567a6c: dependency updates
143
+ - Updated dependencies [a6617c5]
144
+ - @ai-sdk/provider-utils@5.0.0-canary.42
145
+
146
+ ## 2.0.0-canary.50
147
+
148
+ ### Patch Changes
149
+
150
+ - Updated dependencies [28dfa06]
151
+ - Updated dependencies [e93fa91]
152
+ - @ai-sdk/provider-utils@5.0.0-canary.41
153
+
154
+ ## 2.0.0-canary.49
155
+
156
+ ### Patch Changes
157
+
158
+ - Updated dependencies [a7de9c9]
159
+ - @ai-sdk/provider-utils@5.0.0-canary.40
160
+
161
+ ## 2.0.0-canary.48
162
+
163
+ ### Patch Changes
164
+
165
+ - Updated dependencies [105f95b]
166
+ - @ai-sdk/provider-utils@5.0.0-canary.39
167
+
168
+ ## 2.0.0-canary.47
169
+
170
+ ### Patch Changes
171
+
172
+ - 2655da8: fix(mcp): use negotiated protocol version in transport request headers
173
+ - Updated dependencies [ca446f8]
174
+ - @ai-sdk/provider-utils@5.0.0-canary.38
175
+
176
+ ## 2.0.0-canary.46
177
+
178
+ ### Patch Changes
179
+
180
+ - Updated dependencies [d848405]
181
+ - @ai-sdk/provider-utils@5.0.0-canary.37
182
+
183
+ ## 2.0.0-canary.45
184
+
185
+ ### Patch Changes
186
+
187
+ - Updated dependencies [ca39020]
188
+ - @ai-sdk/provider-utils@5.0.0-canary.36
189
+
190
+ ## 2.0.0-canary.44
191
+
192
+ ### Patch Changes
193
+
194
+ - 611f621: feat(mcp): feat(mcp): add support for MCP Apps
195
+
196
+ ## 2.0.0-canary.43
197
+
198
+ ### Patch Changes
199
+
200
+ - f634bac: feat(mcp): add new McpProviderMetadata type
201
+ - Updated dependencies [f634bac]
202
+ - @ai-sdk/provider-utils@5.0.0-canary.35
203
+
204
+ ## 2.0.0-canary.42
205
+
206
+ ### Patch Changes
207
+
208
+ - 69254e0: feat(ai): add toolMetadata for tool specific metdata
209
+ - Updated dependencies [69254e0]
210
+ - Updated dependencies [3015fc3]
211
+ - @ai-sdk/provider-utils@5.0.0-canary.34
212
+
213
+ ## 2.0.0-canary.41
214
+
215
+ ### Patch Changes
216
+
217
+ - b79094c: Add `resource_link` content type to `CallToolResultSchema` and `PromptMessageSchema` per MCP spec. Fixes hard rejection when MCP servers return `resource_link` content parts with zod ≥ 4.4.x.
218
+ - 1451759: feat(mcp): deprecate name and use clientName for MCPClient
219
+
220
+ ## 2.0.0-canary.40
221
+
222
+ ### Patch Changes
223
+
224
+ - Updated dependencies [2427d88]
225
+ - @ai-sdk/provider-utils@5.0.0-canary.33
226
+
227
+ ## 2.0.0-canary.39
228
+
229
+ ### Patch Changes
230
+
231
+ - 5463d0d: feat(provider): align tool result output content file part types with top-level message file part types
232
+ - Updated dependencies [5463d0d]
233
+ - @ai-sdk/provider-utils@5.0.0-canary.32
234
+ - @ai-sdk/provider@4.0.0-canary.16
235
+
236
+ ## 2.0.0-canary.38
237
+
238
+ ### Patch Changes
239
+
240
+ - 0c4c275: trigger initial canary release
241
+ - Updated dependencies [0c4c275]
242
+ - @ai-sdk/provider-utils@5.0.0-canary.31
243
+ - @ai-sdk/provider@4.0.0-canary.15
244
+
245
+ ## 2.0.0-beta.37
246
+
247
+ ### Patch Changes
248
+
249
+ - 08d2129: feat(mcp): propagate the server name through dynamic tool parts
250
+ - Updated dependencies [08d2129]
251
+ - @ai-sdk/provider-utils@5.0.0-beta.30
252
+
253
+ ## 2.0.0-beta.36
254
+
255
+ ### Patch Changes
256
+
257
+ - 258c093: chore: ensure consistent import handling and avoid import duplicates or cycles
258
+ - Updated dependencies [9bd6512]
259
+ - Updated dependencies [258c093]
260
+ - Updated dependencies [b6783da]
261
+ - @ai-sdk/provider-utils@5.0.0-beta.29
262
+ - @ai-sdk/provider@4.0.0-beta.14
263
+
264
+ ## 2.0.0-beta.35
265
+
266
+ ### Patch Changes
267
+
268
+ - 9f0e36c: trigger release for all packages after provenance setup
269
+ - Updated dependencies [9f0e36c]
270
+ - @ai-sdk/provider@4.0.0-beta.13
271
+ - @ai-sdk/provider-utils@5.0.0-beta.28
272
+
273
+ ## 2.0.0-beta.34
274
+
275
+ ### Patch Changes
276
+
277
+ - 93afb28: feat(mcp): expose server instructions to be accessible through client
278
+ - 9b0bc8a: fix(mcp): prevent prototype pollution by using secureJsonParse
279
+ - Updated dependencies [785fe16]
280
+ - Updated dependencies [67df0a0]
281
+ - Updated dependencies [befb78c]
282
+ - Updated dependencies [0458559]
283
+ - Updated dependencies [5852c0a]
284
+ - Updated dependencies [fc92055]
285
+ - @ai-sdk/provider-utils@5.0.0-beta.27
286
+
287
+ ## 2.0.0-beta.33
288
+
289
+ ### Patch Changes
290
+
291
+ - Updated dependencies [2e98477]
292
+ - @ai-sdk/provider-utils@5.0.0-beta.26
293
+
294
+ ## 2.0.0-beta.32
295
+
296
+ ### Patch Changes
297
+
298
+ - Updated dependencies [eea8d98]
299
+ - @ai-sdk/provider-utils@5.0.0-beta.25
300
+
301
+ ## 2.0.0-beta.31
302
+
303
+ ### Patch Changes
304
+
305
+ - Updated dependencies [f807e45]
306
+ - @ai-sdk/provider-utils@5.0.0-beta.24
307
+
308
+ ## 2.0.0-beta.30
309
+
310
+ ### Patch Changes
311
+
312
+ - Updated dependencies [350ea38]
313
+ - @ai-sdk/provider-utils@5.0.0-beta.23
314
+
315
+ ## 2.0.0-beta.29
316
+
317
+ ### Patch Changes
318
+
319
+ - Updated dependencies [083947b]
320
+ - @ai-sdk/provider-utils@5.0.0-beta.22
321
+
322
+ ## 2.0.0-beta.28
323
+
324
+ ### Patch Changes
325
+
326
+ - Updated dependencies [add1126]
327
+ - @ai-sdk/provider-utils@5.0.0-beta.21
328
+
329
+ ## 2.0.0-beta.27
330
+
331
+ ### Patch Changes
332
+
333
+ - ff5eba1: feat: roll `image-*` tool output types into their equivalent `file-*` types
334
+ - Updated dependencies [b3976a2]
335
+ - Updated dependencies [ff5eba1]
336
+ - @ai-sdk/provider-utils@5.0.0-beta.20
337
+ - @ai-sdk/provider@4.0.0-beta.12
338
+
339
+ ## 2.0.0-beta.26
340
+
341
+ ### Major Changes
342
+
343
+ - ef992f8: Remove CommonJS exports from all packages. All packages are now ESM-only (`"type": "module"`). Consumers using `require()` must switch to ESM `import` syntax.
344
+
345
+ ### Patch Changes
346
+
347
+ - Updated dependencies [ef992f8]
348
+ - @ai-sdk/provider@4.0.0-beta.11
349
+ - @ai-sdk/provider-utils@5.0.0-beta.19
350
+
351
+ ## 2.0.0-beta.25
352
+
353
+ ### Patch Changes
354
+
355
+ - 90e2d8a: chore: fix unused vars not being flagged by our lint tooling
356
+ - Updated dependencies [90e2d8a]
357
+ - @ai-sdk/provider-utils@5.0.0-beta.18
358
+
359
+ ## 2.0.0-beta.24
360
+
361
+ ### Patch Changes
362
+
363
+ - Updated dependencies [3ae1786]
364
+ - @ai-sdk/provider-utils@5.0.0-beta.17
365
+
366
+ ## 2.0.0-beta.23
367
+
368
+ ### Patch Changes
369
+
370
+ - a98bf66: feat(mcp): surface 'serverInfo' exposed from the MCP server
371
+
372
+ ## 2.0.0-beta.22
373
+
374
+ ### Patch Changes
375
+
376
+ - Updated dependencies [176466a]
377
+ - @ai-sdk/provider@4.0.0-beta.10
378
+ - @ai-sdk/provider-utils@5.0.0-beta.16
379
+
380
+ ## 2.0.0-beta.21
381
+
382
+ ### Patch Changes
383
+
384
+ - Updated dependencies [e311194]
385
+ - @ai-sdk/provider@4.0.0-beta.9
386
+ - @ai-sdk/provider-utils@5.0.0-beta.15
387
+
388
+ ## 2.0.0-beta.20
389
+
390
+ ### Patch Changes
391
+
392
+ - Updated dependencies [34bd95d]
393
+ - Updated dependencies [008271d]
394
+ - @ai-sdk/provider@4.0.0-beta.8
395
+ - @ai-sdk/provider-utils@5.0.0-beta.14
396
+
397
+ ## 2.0.0-beta.19
398
+
399
+ ### Patch Changes
400
+
401
+ - Updated dependencies [b0c2869]
402
+ - Updated dependencies [7e26e81]
403
+ - @ai-sdk/provider-utils@5.0.0-beta.13
404
+
405
+ ## 2.0.0-beta.18
406
+
407
+ ### Patch Changes
408
+
409
+ - e3ea484: fix(mcp): bypass outputSchema validation when tool returns isError
410
+
411
+ ## 2.0.0-beta.17
412
+
413
+ ### Patch Changes
414
+
415
+ - a00d1d3: feat(mcp): allow custom fetch for HTTP and SSE transports
416
+
417
+ ## 2.0.0-beta.16
418
+
419
+ ### Patch Changes
420
+
421
+ - Updated dependencies [46d1149]
422
+ - @ai-sdk/provider-utils@5.0.0-beta.12
423
+
424
+ ## 2.0.0-beta.15
425
+
426
+ ### Patch Changes
427
+
428
+ - Updated dependencies [6fd51c0]
429
+ - @ai-sdk/provider-utils@5.0.0-beta.11
430
+ - @ai-sdk/provider@4.0.0-beta.7
431
+
432
+ ## 2.0.0-beta.14
433
+
434
+ ### Patch Changes
435
+
436
+ - 1e89d62: fix(mcp): strip trailing slash from OAuth resource parameter
437
+ - Updated dependencies [c29a26f]
438
+ - @ai-sdk/provider-utils@5.0.0-beta.10
439
+ - @ai-sdk/provider@4.0.0-beta.6
440
+
441
+ ## 2.0.0-beta.13
442
+
443
+ ### Patch Changes
444
+
445
+ - Updated dependencies [2e17091]
446
+ - @ai-sdk/provider-utils@5.0.0-beta.9
447
+
448
+ ## 2.0.0-beta.12
449
+
450
+ ### Patch Changes
451
+
452
+ - Updated dependencies [986c6fd]
453
+ - Updated dependencies [493295c]
454
+ - @ai-sdk/provider-utils@5.0.0-beta.8
455
+
456
+ ## 2.0.0-beta.11
457
+
458
+ ### Patch Changes
459
+
460
+ - Updated dependencies [1f509d4]
461
+ - @ai-sdk/provider-utils@5.0.0-beta.7
462
+ - @ai-sdk/provider@4.0.0-beta.5
463
+
464
+ ## 2.0.0-beta.10
465
+
466
+ ### Patch Changes
467
+
468
+ - Updated dependencies [3887c70]
469
+ - @ai-sdk/provider-utils@5.0.0-beta.6
470
+ - @ai-sdk/provider@4.0.0-beta.4
471
+
472
+ ## 2.0.0-beta.9
473
+
474
+ ### Patch Changes
475
+
476
+ - Updated dependencies [776b617]
477
+ - @ai-sdk/provider-utils@5.0.0-beta.5
478
+ - @ai-sdk/provider@4.0.0-beta.3
479
+
480
+ ## 2.0.0-beta.8
481
+
482
+ ### Patch Changes
483
+
484
+ - Updated dependencies [61753c3]
485
+ - @ai-sdk/provider-utils@5.0.0-beta.4
486
+
487
+ ## 2.0.0-beta.7
488
+
489
+ ### Major Changes
490
+
491
+ - 23fa161: fix(mcp): setting redirect: error for MCP transport
492
+
3
493
  ## 2.0.0-beta.6
4
494
 
5
495
  ### Patch Changes
@@ -241,15 +731,15 @@
241
731
  This change replaces
242
732
 
243
733
  ```ts
244
- import { experimental_createMCPClient } from 'ai';
245
- import { Experimental_StdioMCPTransport } from 'ai/mcp-stdio';
734
+ import { experimental_createMCPClient } from "ai";
735
+ import { Experimental_StdioMCPTransport } from "ai/mcp-stdio";
246
736
  ```
247
737
 
248
738
  with
249
739
 
250
740
  ```ts
251
- import { experimental_createMCPClient } from '@ai-sdk/mcp';
252
- import { Experimental_StdioMCPTransport } from '@ai-sdk/mcp/mcp-stdio';
741
+ import { experimental_createMCPClient } from "@ai-sdk/mcp";
742
+ import { Experimental_StdioMCPTransport } from "@ai-sdk/mcp/mcp-stdio";
253
743
  ```
254
744
 
255
745
  ### Patch Changes
@@ -615,13 +1105,13 @@
615
1105
  This change replaces
616
1106
 
617
1107
  ```ts
618
- import { experimental_createMCPClient } from 'ai';
619
- import { Experimental_StdioMCPTransport } from 'ai/mcp-stdio';
1108
+ import { experimental_createMCPClient } from "ai";
1109
+ import { Experimental_StdioMCPTransport } from "ai/mcp-stdio";
620
1110
  ```
621
1111
 
622
1112
  with
623
1113
 
624
1114
  ```ts
625
- import { experimental_createMCPClient } from '@ai-sdk/mcp';
626
- import { Experimental_StdioMCPTransport } from '@ai-sdk/mcp/mcp-stdio';
1115
+ import { experimental_createMCPClient } from "@ai-sdk/mcp";
1116
+ import { Experimental_StdioMCPTransport } from "@ai-sdk/mcp/mcp-stdio";
627
1117
  ```
package/README.md ADDED
@@ -0,0 +1,134 @@
1
+ # AI SDK - Model Context Protocol Client
2
+
3
+ The **Model Context Protocol (MCP) client** for the
4
+ [AI SDK](https://ai-sdk.dev/docs) lets you connect to MCP servers and use their
5
+ tools with AI SDK functions like `generateText` and `streamText`.
6
+
7
+ ## Setup
8
+
9
+ The MCP client is available in the `@ai-sdk/mcp` module. You can install it with
10
+
11
+ ```bash
12
+ npm i @ai-sdk/mcp ai zod
13
+ ```
14
+
15
+ ## Skill for Coding Agents
16
+
17
+ If you use coding agents such as Claude Code or Cursor, we highly recommend
18
+ adding the AI SDK skill to your repository:
19
+
20
+ ```shell
21
+ npx skills add vercel/ai
22
+ ```
23
+
24
+ ## Usage
25
+
26
+ Create an MCP client with `createMCPClient()`, fetch the server tools with
27
+ `mcpClient.tools()`, and pass them to an AI SDK call:
28
+
29
+ ```ts
30
+ import { createMCPClient } from '@ai-sdk/mcp';
31
+ import { generateText, isStepCount } from 'ai';
32
+
33
+ const mcpClient = await createMCPClient({
34
+ transport: {
35
+ type: 'http',
36
+ url: 'https://your-server.com/mcp',
37
+ headers: {
38
+ Authorization: `Bearer ${process.env.MCP_API_KEY}`,
39
+ },
40
+ },
41
+ });
42
+
43
+ try {
44
+ const tools = await mcpClient.tools();
45
+
46
+ const { text } = await generateText({
47
+ model: 'openai/gpt-5.4',
48
+ tools,
49
+ stopWhen: isStepCount(10),
50
+ prompt: 'Use the available tools to answer the user question.',
51
+ });
52
+
53
+ console.log(text);
54
+ } finally {
55
+ await mcpClient.close();
56
+ }
57
+ ```
58
+
59
+ The client converts MCP tool definitions into AI SDK tools, so model calls can
60
+ use them through the standard `tools` option.
61
+
62
+ For streaming responses, close the MCP client when the stream finishes:
63
+
64
+ ```ts
65
+ import { createMCPClient } from '@ai-sdk/mcp';
66
+ import { streamText } from 'ai';
67
+
68
+ const mcpClient = await createMCPClient({
69
+ transport: {
70
+ type: 'http',
71
+ url: 'https://your-server.com/mcp',
72
+ },
73
+ });
74
+
75
+ const result = streamText({
76
+ model: 'openai/gpt-5.4',
77
+ tools: await mcpClient.tools(),
78
+ prompt: 'Use the available tools to answer the user question.',
79
+ onFinish: async () => {
80
+ await mcpClient.close();
81
+ },
82
+ });
83
+
84
+ for await (const textPart of result.textStream) {
85
+ process.stdout.write(textPart);
86
+ }
87
+ ```
88
+
89
+ ## Transports
90
+
91
+ HTTP is recommended for production deployments:
92
+
93
+ ```ts
94
+ import { createMCPClient } from '@ai-sdk/mcp';
95
+
96
+ const mcpClient = await createMCPClient({
97
+ transport: {
98
+ type: 'http',
99
+ url: 'https://your-server.com/mcp',
100
+ },
101
+ });
102
+ ```
103
+
104
+ SSE is also supported for MCP servers that use Server-Sent Events:
105
+
106
+ ```ts
107
+ const mcpClient = await createMCPClient({
108
+ transport: {
109
+ type: 'sse',
110
+ url: 'https://your-server.com/sse',
111
+ },
112
+ });
113
+ ```
114
+
115
+ For local MCP servers, you can use stdio transport from the `@ai-sdk/mcp/mcp-stdio`
116
+ subpath:
117
+
118
+ ```ts
119
+ import { createMCPClient } from '@ai-sdk/mcp';
120
+ import { Experimental_StdioMCPTransport } from '@ai-sdk/mcp/mcp-stdio';
121
+
122
+ const mcpClient = await createMCPClient({
123
+ transport: new Experimental_StdioMCPTransport({
124
+ command: 'node',
125
+ args: ['server.js'],
126
+ }),
127
+ });
128
+ ```
129
+
130
+ ## Documentation
131
+
132
+ Please check out the
133
+ [AI SDK MCP documentation](https://ai-sdk.dev/docs/ai-sdk-core/mcp-tools) for
134
+ more information.