ai 6.0.30 → 6.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.mjs +1 -1
  4. package/dist/internal/index.js +1 -1
  5. package/dist/internal/index.mjs +1 -1
  6. package/docs/00-introduction/index.mdx +76 -0
  7. package/docs/02-foundations/01-overview.mdx +43 -0
  8. package/docs/02-foundations/02-providers-and-models.mdx +163 -0
  9. package/docs/02-foundations/03-prompts.mdx +620 -0
  10. package/docs/02-foundations/04-tools.mdx +160 -0
  11. package/docs/02-foundations/05-streaming.mdx +62 -0
  12. package/docs/02-foundations/index.mdx +43 -0
  13. package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
  14. package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
  15. package/docs/02-getting-started/02-nextjs-app-router.mdx +556 -0
  16. package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
  17. package/docs/02-getting-started/04-svelte.mdx +627 -0
  18. package/docs/02-getting-started/05-nuxt.mdx +566 -0
  19. package/docs/02-getting-started/06-nodejs.mdx +512 -0
  20. package/docs/02-getting-started/07-expo.mdx +766 -0
  21. package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
  22. package/docs/02-getting-started/index.mdx +44 -0
  23. package/docs/03-agents/01-overview.mdx +96 -0
  24. package/docs/03-agents/02-building-agents.mdx +367 -0
  25. package/docs/03-agents/03-workflows.mdx +370 -0
  26. package/docs/03-agents/04-loop-control.mdx +350 -0
  27. package/docs/03-agents/05-configuring-call-options.mdx +286 -0
  28. package/docs/03-agents/index.mdx +40 -0
  29. package/docs/03-ai-sdk-core/01-overview.mdx +33 -0
  30. package/docs/03-ai-sdk-core/05-generating-text.mdx +600 -0
  31. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +662 -0
  32. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1102 -0
  33. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +375 -0
  34. package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +144 -0
  35. package/docs/03-ai-sdk-core/25-settings.mdx +198 -0
  36. package/docs/03-ai-sdk-core/30-embeddings.mdx +247 -0
  37. package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
  38. package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
  39. package/docs/03-ai-sdk-core/36-transcription.mdx +173 -0
  40. package/docs/03-ai-sdk-core/37-speech.mdx +167 -0
  41. package/docs/03-ai-sdk-core/40-middleware.mdx +480 -0
  42. package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
  43. package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
  44. package/docs/03-ai-sdk-core/55-testing.mdx +218 -0
  45. package/docs/03-ai-sdk-core/60-telemetry.mdx +313 -0
  46. package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
  47. package/docs/03-ai-sdk-core/index.mdx +88 -0
  48. package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
  49. package/docs/04-ai-sdk-ui/02-chatbot.mdx +1313 -0
  50. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -0
  51. package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
  52. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
  53. package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
  54. package/docs/04-ai-sdk-ui/05-completion.mdx +186 -0
  55. package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
  56. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
  57. package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
  58. package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
  59. package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
  60. package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
  61. package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +477 -0
  62. package/docs/04-ai-sdk-ui/index.mdx +64 -0
  63. package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
  64. package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
  65. package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
  66. package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
  67. package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
  68. package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +158 -0
  69. package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
  70. package/docs/05-ai-sdk-rsc/08-error-handling.mdx +96 -0
  71. package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
  72. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
  73. package/docs/05-ai-sdk-rsc/index.mdx +58 -0
  74. package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
  75. package/docs/06-advanced/02-stopping-streams.mdx +184 -0
  76. package/docs/06-advanced/03-backpressure.mdx +173 -0
  77. package/docs/06-advanced/04-caching.mdx +169 -0
  78. package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
  79. package/docs/06-advanced/06-rate-limiting.mdx +60 -0
  80. package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +213 -0
  81. package/docs/06-advanced/08-model-as-router.mdx +120 -0
  82. package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
  83. package/docs/06-advanced/09-sequential-generations.mdx +55 -0
  84. package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
  85. package/docs/06-advanced/index.mdx +11 -0
  86. package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2142 -0
  87. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3215 -0
  88. package/docs/07-reference/01-ai-sdk-core/03-generate-object.mdx +780 -0
  89. package/docs/07-reference/01-ai-sdk-core/04-stream-object.mdx +1140 -0
  90. package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +190 -0
  91. package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +171 -0
  92. package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -0
  93. package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +227 -0
  94. package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +138 -0
  95. package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +214 -0
  96. package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +203 -0
  97. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +449 -0
  98. package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +148 -0
  99. package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +168 -0
  100. package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +144 -0
  101. package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +196 -0
  102. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +175 -0
  103. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +410 -0
  104. package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
  105. package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
  106. package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
  107. package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +55 -0
  108. package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
  109. package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +415 -0
  110. package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +246 -0
  111. package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
  112. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
  113. package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +182 -0
  114. package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +121 -0
  115. package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
  116. package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
  117. package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
  118. package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +46 -0
  119. package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
  120. package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
  121. package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
  122. package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
  123. package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
  124. package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
  125. package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
  126. package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
  127. package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
  128. package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +43 -0
  129. package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
  130. package/docs/07-reference/01-ai-sdk-core/index.mdx +159 -0
  131. package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +446 -0
  132. package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +179 -0
  133. package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +178 -0
  134. package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +230 -0
  135. package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
  136. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +151 -0
  137. package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +113 -0
  138. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +73 -0
  139. package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
  140. package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
  141. package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
  142. package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
  143. package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
  144. package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
  145. package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
  146. package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
  147. package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +48 -0
  148. package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +78 -0
  149. package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
  150. package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
  151. package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
  152. package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
  153. package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
  154. package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
  155. package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +262 -0
  156. package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
  157. package/docs/07-reference/04-stream-helpers/01-ai-stream.mdx +89 -0
  158. package/docs/07-reference/04-stream-helpers/02-streaming-text-response.mdx +79 -0
  159. package/docs/07-reference/04-stream-helpers/05-stream-to-response.mdx +108 -0
  160. package/docs/07-reference/04-stream-helpers/07-openai-stream.mdx +77 -0
  161. package/docs/07-reference/04-stream-helpers/08-anthropic-stream.mdx +79 -0
  162. package/docs/07-reference/04-stream-helpers/09-aws-bedrock-stream.mdx +91 -0
  163. package/docs/07-reference/04-stream-helpers/10-aws-bedrock-anthropic-stream.mdx +96 -0
  164. package/docs/07-reference/04-stream-helpers/10-aws-bedrock-messages-stream.mdx +96 -0
  165. package/docs/07-reference/04-stream-helpers/11-aws-bedrock-cohere-stream.mdx +93 -0
  166. package/docs/07-reference/04-stream-helpers/12-aws-bedrock-llama-2-stream.mdx +93 -0
  167. package/docs/07-reference/04-stream-helpers/13-cohere-stream.mdx +78 -0
  168. package/docs/07-reference/04-stream-helpers/14-google-generative-ai-stream.mdx +85 -0
  169. package/docs/07-reference/04-stream-helpers/15-hugging-face-stream.mdx +84 -0
  170. package/docs/07-reference/04-stream-helpers/16-langchain-adapter.mdx +98 -0
  171. package/docs/07-reference/04-stream-helpers/16-llamaindex-adapter.mdx +70 -0
  172. package/docs/07-reference/04-stream-helpers/17-mistral-stream.mdx +81 -0
  173. package/docs/07-reference/04-stream-helpers/18-replicate-stream.mdx +83 -0
  174. package/docs/07-reference/04-stream-helpers/19-inkeep-stream.mdx +80 -0
  175. package/docs/07-reference/04-stream-helpers/index.mdx +103 -0
  176. package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +30 -0
  177. package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +27 -0
  178. package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
  179. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
  180. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +25 -0
  181. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content.mdx +26 -0
  182. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
  183. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
  184. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
  185. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +25 -0
  186. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
  187. package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
  188. package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
  189. package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
  190. package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
  191. package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
  192. package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
  193. package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
  194. package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +25 -0
  195. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
  196. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
  197. package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
  198. package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +25 -0
  199. package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
  200. package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
  201. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +26 -0
  202. package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
  203. package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
  204. package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
  205. package/docs/07-reference/05-ai-sdk-errors/index.mdx +38 -0
  206. package/docs/07-reference/index.mdx +34 -0
  207. package/docs/08-migration-guides/00-versioning.mdx +46 -0
  208. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
  209. package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
  210. package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
  211. package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
  212. package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
  213. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
  214. package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
  215. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
  216. package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
  217. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
  218. package/docs/08-migration-guides/index.mdx +22 -0
  219. package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
  220. package/docs/09-troubleshooting/02-client-side-function-calls-not-invoked.mdx +22 -0
  221. package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
  222. package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
  223. package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
  224. package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
  225. package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
  226. package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
  227. package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
  228. package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
  229. package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
  230. package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
  231. package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
  232. package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
  233. package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
  234. package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
  235. package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
  236. package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
  237. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
  238. package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
  239. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
  240. package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
  241. package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
  242. package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
  243. package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
  244. package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +72 -0
  245. package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
  246. package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
  247. package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
  248. package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
  249. package/docs/09-troubleshooting/index.mdx +11 -0
  250. package/package.json +7 -3
@@ -0,0 +1,175 @@
1
+ ---
2
+ title: dynamicTool
3
+ description: Helper function for creating dynamic tools with unknown types
4
+ ---
5
+
6
+ # `dynamicTool()`
7
+
8
+ The `dynamicTool` function creates tools where the input and output types are not known at compile time. This is useful for scenarios such as:
9
+
10
+ - MCP (Model Context Protocol) tools without schemas
11
+ - User-defined functions loaded at runtime
12
+ - Tools loaded from external sources or databases
13
+ - Dynamic tool generation based on user input
14
+
15
+ Unlike the regular `tool` function, `dynamicTool` accepts and returns `unknown` types, allowing you to work with tools that have runtime-determined schemas.
16
+
17
+ ```ts highlight={"1,4,9,10,11"}
18
+ import { dynamicTool } from 'ai';
19
+ import { z } from 'zod';
20
+
21
+ export const customTool = dynamicTool({
22
+ description: 'Execute a custom user-defined function',
23
+ inputSchema: z.object({}),
24
+ // input is typed as 'unknown'
25
+ execute: async input => {
26
+ const { action, parameters } = input as any;
27
+
28
+ // Execute your dynamic logic
29
+ return {
30
+ result: `Executed ${action} with ${JSON.stringify(parameters)}`,
31
+ };
32
+ },
33
+ });
34
+ ```
35
+
36
+ ## Import
37
+
38
+ <Snippet text={`import { dynamicTool } from "ai"`} prompt={false} />
39
+
40
+ ## API Signature
41
+
42
+ ### Parameters
43
+
44
+ <PropertiesTable
45
+ content={[
46
+ {
47
+ name: 'tool',
48
+ type: 'Object',
49
+ description: 'The dynamic tool definition.',
50
+ properties: [
51
+ {
52
+ type: 'Object',
53
+ parameters: [
54
+ {
55
+ name: 'description',
56
+ isOptional: true,
57
+ type: 'string',
58
+ description:
59
+ 'Information about the purpose of the tool including details on how and when it can be used by the model.'
60
+ },
61
+ {
62
+ name: 'inputSchema',
63
+ type: 'FlexibleSchema<unknown>',
64
+ description:
65
+ 'The schema of the input that the tool expects. While the type is unknown, a schema is still required for validation. You can use Zod schemas with z.unknown() or z.any() for fully dynamic inputs.'
66
+ },
67
+ {
68
+ name: 'execute',
69
+ type: 'ToolExecuteFunction<unknown, unknown>',
70
+ description:
71
+ 'An async function that is called with the arguments from the tool call. The input is typed as unknown and must be validated/cast at runtime.',
72
+ properties: [
73
+ {
74
+ type: "ToolExecutionOptions",
75
+ parameters: [
76
+ {
77
+ name: 'toolCallId',
78
+ type: 'string',
79
+ description: 'The ID of the tool call.',
80
+ },
81
+ {
82
+ name: "messages",
83
+ type: "ModelMessage[]",
84
+ description: "Messages that were sent to the language model."
85
+ },
86
+ {
87
+ name: "abortSignal",
88
+ type: "AbortSignal",
89
+ isOptional: true,
90
+ description: "An optional abort signal."
91
+ }
92
+ ]
93
+ }
94
+ ]
95
+ },
96
+ {
97
+ name: 'toModelOutput',
98
+ isOptional: true,
99
+ type: '({toolCallId: string; input: unknown; output: unknown}) => ToolResultOutput | PromiseLike<ToolResultOutput>',
100
+ description: 'Optional conversion function that maps the tool result to an output that can be used by the language model.'
101
+ },
102
+ {
103
+ name: 'providerOptions',
104
+ isOptional: true,
105
+ type: 'ProviderOptions',
106
+ description: 'Additional provider-specific metadata.'
107
+ }
108
+ ]
109
+ }
110
+ ]
111
+ }
112
+
113
+ ]}
114
+ />
115
+
116
+ ### Returns
117
+
118
+ A `Tool<unknown, unknown>` with `type: 'dynamic'` that can be used with `generateText`, `streamText`, and other AI SDK functions.
119
+
120
+ ## Type-Safe Usage
121
+
122
+ When using dynamic tools alongside static tools, you need to check the `dynamic` flag for proper type narrowing:
123
+
124
+ ```ts
125
+ const result = await generateText({
126
+ model: __MODEL__,
127
+ tools: {
128
+ // Static tool with known types
129
+ weather: weatherTool,
130
+ // Dynamic tool with unknown types
131
+ custom: dynamicTool({
132
+ /* ... */
133
+ }),
134
+ },
135
+ onStepFinish: ({ toolCalls, toolResults }) => {
136
+ for (const toolCall of toolCalls) {
137
+ if (toolCall.dynamic) {
138
+ // Dynamic tool: input/output are 'unknown'
139
+ console.log('Dynamic tool:', toolCall.toolName);
140
+ console.log('Input:', toolCall.input);
141
+ continue;
142
+ }
143
+
144
+ // Static tools have full type inference
145
+ switch (toolCall.toolName) {
146
+ case 'weather':
147
+ // TypeScript knows the exact types
148
+ console.log(toolCall.input.location); // string
149
+ break;
150
+ }
151
+ }
152
+ },
153
+ });
154
+ ```
155
+
156
+ ## Usage with `useChat`
157
+
158
+ When used with useChat (`UIMessage` format), dynamic tools appear as `dynamic-tool` parts:
159
+
160
+ ```tsx
161
+ {
162
+ message.parts.map(part => {
163
+ switch (part.type) {
164
+ case 'dynamic-tool':
165
+ return (
166
+ <div>
167
+ <h4>Tool: {part.toolName}</h4>
168
+ <pre>{JSON.stringify(part.input, null, 2)}</pre>
169
+ </div>
170
+ );
171
+ // ... handle other part types
172
+ }
173
+ });
174
+ }
175
+ ```
@@ -0,0 +1,410 @@
1
+ ---
2
+ title: createMCPClient
3
+ description: Create a client for connecting to MCP servers
4
+ ---
5
+
6
+ # `createMCPClient()`
7
+
8
+ Creates a lightweight Model Context Protocol (MCP) client that connects to an MCP server. The client provides:
9
+
10
+ - **Tools**: Automatic conversion between MCP tools and AI SDK tools
11
+ - **Resources**: Methods to list, read, and discover resource templates from MCP servers
12
+ - **Prompts**: Methods to list available prompts and retrieve prompt messages
13
+ - **Elicitation**: Support for handling server requests for additional input during tool execution
14
+
15
+ It currently does not support accepting notifications from an MCP server, and custom configuration of the client.
16
+
17
+ ## Import
18
+
19
+ <Snippet
20
+ text={`import { createMCPClient } from "@ai-sdk/mcp"`}
21
+ prompt={false}
22
+ />
23
+
24
+ ## API Signature
25
+
26
+ ### Parameters
27
+
28
+ <PropertiesTable
29
+ content={[
30
+ {
31
+ name: 'config',
32
+ type: 'MCPClientConfig',
33
+ description: 'Configuration for the MCP client.',
34
+ properties: [
35
+ {
36
+ type: 'MCPClientConfig',
37
+ parameters: [
38
+ {
39
+ name: 'transport',
40
+ type: 'TransportConfig = MCPTransport | McpSSEServerConfig',
41
+ description: 'Configuration for the message transport layer.',
42
+ properties: [
43
+ {
44
+ type: 'MCPTransport',
45
+ description:
46
+ 'A client transport instance, used explicitly for stdio or custom transports',
47
+ parameters: [
48
+ {
49
+ name: 'start',
50
+ type: '() => Promise<void>',
51
+ description: 'A method that starts the transport',
52
+ },
53
+ {
54
+ name: 'send',
55
+ type: '(message: JSONRPCMessage) => Promise<void>',
56
+ description:
57
+ 'A method that sends a message through the transport',
58
+ },
59
+ {
60
+ name: 'close',
61
+ type: '() => Promise<void>',
62
+ description: 'A method that closes the transport',
63
+ },
64
+ {
65
+ name: 'onclose',
66
+ type: '() => void',
67
+ description:
68
+ 'A method that is called when the transport is closed',
69
+ },
70
+ {
71
+ name: 'onerror',
72
+ type: '(error: Error) => void',
73
+ description:
74
+ 'A method that is called when the transport encounters an error',
75
+ },
76
+ {
77
+ name: 'onmessage',
78
+ type: '(message: JSONRPCMessage) => void',
79
+ description:
80
+ 'A method that is called when the transport receives a message',
81
+ },
82
+ ],
83
+ },
84
+ {
85
+ type: 'MCPTransportConfig',
86
+ parameters: [
87
+ {
88
+ name: 'type',
89
+ type: "'sse' | 'http",
90
+ description: 'Use Server-Sent Events for communication',
91
+ },
92
+ {
93
+ name: 'url',
94
+ type: 'string',
95
+ description: 'URL of the MCP server',
96
+ },
97
+ {
98
+ name: 'headers',
99
+ type: 'Record<string, string>',
100
+ isOptional: true,
101
+ description:
102
+ 'Additional HTTP headers to be sent with requests.',
103
+ },
104
+ {
105
+ name: 'authProvider',
106
+ type: 'OAuthClientProvider',
107
+ isOptional: true,
108
+ description:
109
+ 'Optional OAuth provider for authorization to access protected remote MCP servers.',
110
+ },
111
+ ],
112
+ },
113
+ ],
114
+ },
115
+ {
116
+ name: 'name',
117
+ type: 'string',
118
+ isOptional: true,
119
+ description: 'Client name. Defaults to "ai-sdk-mcp-client"',
120
+ },
121
+ {
122
+ name: 'onUncaughtError',
123
+ type: '(error: unknown) => void',
124
+ isOptional: true,
125
+ description: 'Handler for uncaught errors',
126
+ },
127
+ {
128
+ name: 'capabilities',
129
+ type: 'ClientCapabilities',
130
+ isOptional: true,
131
+ description:
132
+ 'Optional client capabilities to advertise during initialization. For example, set { elicitation: {} } to enable handling elicitation requests from the server.',
133
+ },
134
+ ],
135
+ },
136
+ ],
137
+ },
138
+ ]}
139
+ />
140
+
141
+ ### Returns
142
+
143
+ Returns a Promise that resolves to an `MCPClient` with the following methods:
144
+
145
+ <PropertiesTable
146
+ content={[
147
+ {
148
+ name: 'tools',
149
+ type: `async (options?: {
150
+ schemas?: TOOL_SCHEMAS
151
+ }) => Promise<McpToolSet<TOOL_SCHEMAS>>`,
152
+ description: 'Gets the tools available from the MCP server.',
153
+ properties: [
154
+ {
155
+ type: 'options',
156
+ parameters: [
157
+ {
158
+ name: 'schemas',
159
+ type: 'TOOL_SCHEMAS',
160
+ isOptional: true,
161
+ description:
162
+ 'Schema definitions for compile-time type checking. When not provided, schemas are inferred from the server. Each tool schema can include inputSchema for typed inputs, and optionally outputSchema for typed outputs when the server returns structuredContent.',
163
+ },
164
+ ],
165
+ },
166
+ {
167
+ type: 'TOOL_SCHEMAS',
168
+ parameters: [
169
+ {
170
+ name: 'inputSchema',
171
+ type: 'FlexibleSchema',
172
+ description:
173
+ 'Zod schema or JSON schema defining the expected input parameters for the tool.',
174
+ },
175
+ {
176
+ name: 'outputSchema',
177
+ type: 'FlexibleSchema',
178
+ isOptional: true,
179
+ description:
180
+ 'Zod schema or JSON schema defining the expected output structure. When provided, the client extracts and validates structuredContent from tool results, giving you typed outputs.',
181
+ },
182
+ ],
183
+ },
184
+ ],
185
+ },
186
+ {
187
+ name: 'listResources',
188
+ type: `async (options?: {
189
+ params?: PaginatedRequest['params'];
190
+ options?: RequestOptions;
191
+ }) => Promise<ListResourcesResult>`,
192
+ description: 'Lists all available resources from the MCP server.',
193
+ properties: [
194
+ {
195
+ type: 'options',
196
+ parameters: [
197
+ {
198
+ name: 'params',
199
+ type: "PaginatedRequest['params']",
200
+ isOptional: true,
201
+ description: 'Optional pagination parameters including cursor.',
202
+ },
203
+ {
204
+ name: 'options',
205
+ type: 'RequestOptions',
206
+ isOptional: true,
207
+ description:
208
+ 'Optional request options including signal and timeout.',
209
+ },
210
+ ],
211
+ },
212
+ ],
213
+ },
214
+ {
215
+ name: 'readResource',
216
+ type: `async (args: {
217
+ uri: string;
218
+ options?: RequestOptions;
219
+ }) => Promise<ReadResourceResult>`,
220
+ description: 'Reads the contents of a specific resource by URI.',
221
+ properties: [
222
+ {
223
+ type: 'args',
224
+ parameters: [
225
+ {
226
+ name: 'uri',
227
+ type: 'string',
228
+ description: 'The URI of the resource to read.',
229
+ },
230
+ {
231
+ name: 'options',
232
+ type: 'RequestOptions',
233
+ isOptional: true,
234
+ description:
235
+ 'Optional request options including signal and timeout.',
236
+ },
237
+ ],
238
+ },
239
+ ],
240
+ },
241
+ {
242
+ name: 'listResourceTemplates',
243
+ type: `async (options?: {
244
+ options?: RequestOptions;
245
+ }) => Promise<ListResourceTemplatesResult>`,
246
+ description:
247
+ 'Lists all available resource templates from the MCP server.',
248
+ properties: [
249
+ {
250
+ type: 'options',
251
+ parameters: [
252
+ {
253
+ name: 'options',
254
+ type: 'RequestOptions',
255
+ isOptional: true,
256
+ description:
257
+ 'Optional request options including signal and timeout.',
258
+ },
259
+ ],
260
+ },
261
+ ],
262
+ },
263
+ {
264
+ name: 'experimental_listPrompts',
265
+ type: `async (options?: {
266
+ params?: PaginatedRequest['params'];
267
+ options?: RequestOptions;
268
+ }) => Promise<ListPromptsResult>`,
269
+ description:
270
+ 'Lists available prompts from the MCP server. This method is experimental and may change in the future.',
271
+ properties: [
272
+ {
273
+ type: 'options',
274
+ parameters: [
275
+ {
276
+ name: 'params',
277
+ type: "PaginatedRequest['params']",
278
+ isOptional: true,
279
+ description: 'Optional pagination parameters including cursor.',
280
+ },
281
+ {
282
+ name: 'options',
283
+ type: 'RequestOptions',
284
+ isOptional: true,
285
+ description:
286
+ 'Optional request options including signal and timeout.',
287
+ },
288
+ ],
289
+ },
290
+ ],
291
+ },
292
+ {
293
+ name: 'experimental_getPrompt',
294
+ type: `async (args: {
295
+ name: string;
296
+ arguments?: Record<string, unknown>;
297
+ options?: RequestOptions;
298
+ }) => Promise<GetPromptResult>`,
299
+ description:
300
+ 'Retrieves a prompt by name, optionally passing arguments. This method is experimental and may change in the future.',
301
+ properties: [
302
+ {
303
+ type: 'args',
304
+ parameters: [
305
+ {
306
+ name: 'name',
307
+ type: 'string',
308
+ description: 'Prompt name to retrieve.',
309
+ },
310
+ {
311
+ name: 'arguments',
312
+ type: 'Record<string, unknown>',
313
+ isOptional: true,
314
+ description: 'Optional arguments to fill into the prompt.',
315
+ },
316
+ {
317
+ name: 'options',
318
+ type: 'RequestOptions',
319
+ isOptional: true,
320
+ description:
321
+ 'Optional request options including signal and timeout.',
322
+ },
323
+ ],
324
+ },
325
+ ],
326
+ },
327
+ {
328
+ name: 'onElicitationRequest',
329
+ type: `(
330
+ schema: typeof ElicitationRequestSchema,
331
+ handler: (request: ElicitationRequest) => Promise<ElicitResult> | ElicitResult
332
+ ) => void`,
333
+ description:
334
+ 'Registers a handler for elicitation requests from the MCP server. The handler receives requests when the server needs additional input during tool execution.',
335
+ properties: [
336
+ {
337
+ type: 'parameters',
338
+ parameters: [
339
+ {
340
+ name: 'schema',
341
+ type: 'typeof ElicitationRequestSchema',
342
+ description:
343
+ 'The schema to validate requests against. Must be ElicitationRequestSchema.',
344
+ },
345
+ {
346
+ name: 'handler',
347
+ type: '(request: ElicitationRequest) => Promise<ElicitResult> | ElicitResult',
348
+ description:
349
+ 'A function that handles the elicitation request. The request contains a message and requestedSchema. The handler must return an object with an action ("accept", "decline", or "cancel") and optionally content when accepting.',
350
+ },
351
+ ],
352
+ },
353
+ ],
354
+ },
355
+ {
356
+ name: 'close',
357
+ type: 'async () => void',
358
+ description:
359
+ 'Closes the connection to the MCP server and cleans up resources.',
360
+ },
361
+ ]}
362
+ />
363
+
364
+ ## Example
365
+
366
+ ```typescript
367
+ import { createMCPClient } from '@ai-sdk/mcp';
368
+ import { generateText } from 'ai';
369
+ import { Experimental_StdioMCPTransport } from '@ai-sdk/mcp/mcp-stdio';
370
+
371
+ let client;
372
+
373
+ try {
374
+ client = await createMCPClient({
375
+ transport: new Experimental_StdioMCPTransport({
376
+ command: 'node server.js',
377
+ }),
378
+ });
379
+
380
+ const tools = await client.tools();
381
+
382
+ const response = await generateText({
383
+ model: __MODEL__,
384
+ tools,
385
+ messages: [{ role: 'user', content: 'Query the data' }],
386
+ });
387
+
388
+ console.log(response);
389
+ } catch (error) {
390
+ console.error('Error:', error);
391
+ } finally {
392
+ // ensure the client is closed even if an error occurs
393
+ if (client) {
394
+ await client.close();
395
+ }
396
+ }
397
+ ```
398
+
399
+ ## Error Handling
400
+
401
+ The client throws `MCPClientError` for:
402
+
403
+ - Client initialization failures
404
+ - Protocol version mismatches
405
+ - Missing server capabilities
406
+ - Connection failures
407
+
408
+ For tool execution, errors are propagated as `CallToolError` errors.
409
+
410
+ For unknown errors, the client exposes an `onUncaughtError` callback that can be used to manually log or handle errors that are not covered by known error types.
@@ -0,0 +1,68 @@
1
+ ---
2
+ title: Experimental_StdioMCPTransport
3
+ description: Create a transport for Model Context Protocol (MCP) clients to communicate with MCP servers using standard input and output streams
4
+ ---
5
+
6
+ # `Experimental_StdioMCPTransport`
7
+
8
+ Creates a transport for Model Context Protocol (MCP) clients to communicate with MCP servers using standard input and output streams. This transport is only supported in Node.js environments.
9
+
10
+ This feature is experimental and may change or be removed in the future.
11
+
12
+ ## Import
13
+
14
+ <Snippet
15
+ text={`import { Experimental_StdioMCPTransport } from "ai/mcp-stdio"`}
16
+ prompt={false}
17
+ />
18
+
19
+ ## API Signature
20
+
21
+ ### Parameters
22
+
23
+ <PropertiesTable
24
+ content={[
25
+ {
26
+ name: 'config',
27
+ type: 'StdioConfig',
28
+ description: 'Configuration for the MCP client.',
29
+ properties: [
30
+ {
31
+ type: 'StdioConfig',
32
+ parameters: [
33
+ {
34
+ name: 'command',
35
+ type: 'string',
36
+ description: 'The command to run the MCP server.',
37
+ },
38
+ {
39
+ name: 'args',
40
+ type: 'string[]',
41
+ isOptional: true,
42
+ description: 'The arguments to pass to the MCP server.',
43
+ },
44
+ {
45
+ name: 'env',
46
+ type: 'Record<string, string>',
47
+ isOptional: true,
48
+ description:
49
+ 'The environment variables to set for the MCP server.',
50
+ },
51
+ {
52
+ name: 'stderr',
53
+ type: 'IOType | Stream | number',
54
+ isOptional: true,
55
+ description: "The stream to write the MCP server's stderr to.",
56
+ },
57
+ {
58
+ name: 'cwd',
59
+ type: 'string',
60
+ isOptional: true,
61
+ description: 'The current working directory for the MCP server.',
62
+ },
63
+ ],
64
+ },
65
+ ],
66
+ },
67
+ ]}
68
+ />