@assistant-ui/mcp-docs-server 0.2.3 → 0.3.0

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 (452) hide show
  1. package/README.md +16 -43
  2. package/dist/index.d.ts +2 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -91
  5. package/dist/index.js.map +1 -1
  6. package/dist/proxy.d.ts +9 -0
  7. package/dist/proxy.d.ts.map +1 -0
  8. package/dist/proxy.js +76 -0
  9. package/dist/proxy.js.map +1 -0
  10. package/package.json +8 -12
  11. package/src/index.ts +3 -115
  12. package/src/proxy.test.ts +250 -0
  13. package/src/proxy.ts +111 -0
  14. package/.docs/organized/code-examples/waterfall.md +0 -807
  15. package/.docs/organized/code-examples/with-a2a.md +0 -675
  16. package/.docs/organized/code-examples/with-ag-ui.md +0 -553
  17. package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -466
  18. package/.docs/organized/code-examples/with-artifacts.md +0 -815
  19. package/.docs/organized/code-examples/with-assistant-transport.md +0 -576
  20. package/.docs/organized/code-examples/with-browser-extension.md +0 -371
  21. package/.docs/organized/code-examples/with-chain-of-thought.md +0 -962
  22. package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
  23. package/.docs/organized/code-examples/with-cloud.md +0 -439
  24. package/.docs/organized/code-examples/with-custom-thread-list.md +0 -569
  25. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -527
  26. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -697
  27. package/.docs/organized/code-examples/with-eve.md +0 -405
  28. package/.docs/organized/code-examples/with-expo.md +0 -2246
  29. package/.docs/organized/code-examples/with-external-store.md +0 -421
  30. package/.docs/organized/code-examples/with-ffmpeg.md +0 -829
  31. package/.docs/organized/code-examples/with-generative-ui.md +0 -1810
  32. package/.docs/organized/code-examples/with-google-adk.md +0 -368
  33. package/.docs/organized/code-examples/with-heat-graph.md +0 -304
  34. package/.docs/organized/code-examples/with-image-generation.md +0 -463
  35. package/.docs/organized/code-examples/with-interactables.md +0 -733
  36. package/.docs/organized/code-examples/with-langchain.md +0 -446
  37. package/.docs/organized/code-examples/with-langgraph.md +0 -855
  38. package/.docs/organized/code-examples/with-livekit.md +0 -643
  39. package/.docs/organized/code-examples/with-mcp.md +0 -782
  40. package/.docs/organized/code-examples/with-nuxt.md +0 -2428
  41. package/.docs/organized/code-examples/with-opencode.md +0 -1974
  42. package/.docs/organized/code-examples/with-openui.md +0 -450
  43. package/.docs/organized/code-examples/with-pi.md +0 -2084
  44. package/.docs/organized/code-examples/with-react-hook-form.md +0 -727
  45. package/.docs/organized/code-examples/with-react-ink-web.md +0 -740
  46. package/.docs/organized/code-examples/with-react-ink.md +0 -473
  47. package/.docs/organized/code-examples/with-react-router.md +0 -936
  48. package/.docs/organized/code-examples/with-resumable-stream.md +0 -668
  49. package/.docs/organized/code-examples/with-store.md +0 -679
  50. package/.docs/organized/code-examples/with-svelte.md +0 -415
  51. package/.docs/organized/code-examples/with-sveltekit.md +0 -1061
  52. package/.docs/organized/code-examples/with-tanstack.md +0 -812
  53. package/.docs/organized/code-examples/with-tap-runtime.md +0 -813
  54. package/.docs/organized/code-examples/with-virtualized-thread.md +0 -681
  55. package/.docs/organized/code-examples/with-vue.md +0 -408
  56. package/.docs/raw/docs/(getting-started)/architecture.mdx +0 -146
  57. package/.docs/raw/docs/(getting-started)/base-ui.mdx +0 -39
  58. package/.docs/raw/docs/(getting-started)/cli.mdx +0 -542
  59. package/.docs/raw/docs/(getting-started)/devtools.mdx +0 -79
  60. package/.docs/raw/docs/(getting-started)/index.mdx +0 -23
  61. package/.docs/raw/docs/(getting-started)/installation.mdx +0 -483
  62. package/.docs/raw/docs/(getting-started)/llm.mdx +0 -211
  63. package/.docs/raw/docs/(getting-started)/rtl.mdx +0 -78
  64. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +0 -36
  65. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +0 -20
  66. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +0 -34
  67. package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +0 -44
  68. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +0 -59
  69. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +0 -20
  70. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +0 -26
  71. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +0 -84
  72. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +0 -22
  73. package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +0 -64
  74. package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +0 -22
  75. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +0 -57
  76. package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +0 -49
  77. package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +0 -40
  78. package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +0 -56
  79. package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +0 -86
  80. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +0 -39
  81. package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +0 -42
  82. package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +0 -84
  83. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +0 -85
  84. package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +0 -45
  85. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +0 -93
  86. package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +0 -62
  87. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +0 -129
  88. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +0 -31
  89. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +0 -34
  90. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +0 -350
  91. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +0 -28
  92. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +0 -97
  93. package/.docs/raw/docs/(reference)/api-reference/integrations/ai-sdk.mdx +0 -200
  94. package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
  95. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -118
  96. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
  97. package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -37
  98. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +0 -50
  99. package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +0 -22
  100. package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +0 -20
  101. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +0 -566
  102. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +0 -152
  103. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +0 -239
  104. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +0 -208
  105. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +0 -108
  106. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +0 -99
  107. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +0 -145
  108. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +0 -82
  109. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +0 -637
  110. package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +0 -22
  111. package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +0 -65
  112. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +0 -73
  113. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +0 -117
  114. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +0 -339
  115. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +0 -77
  116. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +0 -88
  117. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +0 -81
  118. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +0 -129
  119. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +0 -138
  120. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +0 -122
  121. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +0 -289
  122. package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +0 -20
  123. package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +0 -24
  124. package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +0 -32
  125. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +0 -43
  126. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +0 -43
  127. package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +0 -24
  128. package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +0 -20
  129. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +0 -24
  130. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +0 -24
  131. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +0 -36
  132. package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +0 -85
  133. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +0 -45
  134. package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +0 -55
  135. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +0 -151
  136. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +0 -106
  137. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -62
  138. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +0 -178
  139. package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +0 -48
  140. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +0 -62
  141. package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +0 -22
  142. package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +0 -19
  143. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +0 -152
  144. package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +0 -22
  145. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +0 -54
  146. package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +0 -36
  147. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +0 -527
  148. package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -604
  149. package/.docs/raw/docs/cloud/authorization.mdx +0 -252
  150. package/.docs/raw/docs/cloud/index.mdx +0 -46
  151. package/.docs/raw/docs/cloud/langgraph.mdx +0 -554
  152. package/.docs/raw/docs/copilots/assistant-frame.mdx +0 -411
  153. package/.docs/raw/docs/copilots/make-assistant-visible.mdx +0 -82
  154. package/.docs/raw/docs/copilots/model-context.mdx +0 -156
  155. package/.docs/raw/docs/copilots/motivation.mdx +0 -202
  156. package/.docs/raw/docs/copilots/use-assistant-instructions.mdx +0 -64
  157. package/.docs/raw/docs/guides/attachments.mdx +0 -619
  158. package/.docs/raw/docs/guides/branching.mdx +0 -76
  159. package/.docs/raw/docs/guides/chain-of-thought.mdx +0 -164
  160. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +0 -108
  161. package/.docs/raw/docs/guides/context-api.mdx +0 -619
  162. package/.docs/raw/docs/guides/dictation.mdx +0 -298
  163. package/.docs/raw/docs/guides/editing.mdx +0 -102
  164. package/.docs/raw/docs/guides/electron.mdx +0 -369
  165. package/.docs/raw/docs/guides/headless-composer-input.mdx +0 -113
  166. package/.docs/raw/docs/guides/image-generation.mdx +0 -74
  167. package/.docs/raw/docs/guides/index.mdx +0 -117
  168. package/.docs/raw/docs/guides/input-history.mdx +0 -55
  169. package/.docs/raw/docs/guides/latex.mdx +0 -158
  170. package/.docs/raw/docs/guides/mentions.mdx +0 -575
  171. package/.docs/raw/docs/guides/message-timing.mdx +0 -215
  172. package/.docs/raw/docs/guides/quoting.mdx +0 -169
  173. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +0 -212
  174. package/.docs/raw/docs/guides/resumable-stream-stores.mdx +0 -152
  175. package/.docs/raw/docs/guides/resumable-streams.mdx +0 -292
  176. package/.docs/raw/docs/guides/slash-commands.mdx +0 -358
  177. package/.docs/raw/docs/guides/speech.mdx +0 -172
  178. package/.docs/raw/docs/guides/suggestions.mdx +0 -384
  179. package/.docs/raw/docs/guides/virtualization.mdx +0 -133
  180. package/.docs/raw/docs/guides/voice.mdx +0 -310
  181. package/.docs/raw/docs/ink/adapters.mdx +0 -99
  182. package/.docs/raw/docs/ink/custom-backend.mdx +0 -254
  183. package/.docs/raw/docs/ink/hooks.mdx +0 -469
  184. package/.docs/raw/docs/ink/index.mdx +0 -237
  185. package/.docs/raw/docs/ink/migration.mdx +0 -138
  186. package/.docs/raw/docs/ink/primitives.mdx +0 -1259
  187. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +0 -528
  188. package/.docs/raw/docs/integrations/auth/better-auth.mdx +0 -188
  189. package/.docs/raw/docs/integrations/auth/clerk.mdx +0 -166
  190. package/.docs/raw/docs/integrations/auth/next-auth.mdx +0 -191
  191. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +0 -88
  192. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents.mdx +0 -283
  193. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +0 -188
  194. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +0 -57
  195. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +0 -201
  196. package/.docs/raw/docs/integrations/gateways/index.mdx +0 -162
  197. package/.docs/raw/docs/integrations/index.mdx +0 -178
  198. package/.docs/raw/docs/integrations/observability/helicone.mdx +0 -129
  199. package/.docs/raw/docs/integrations/observability/langfuse.mdx +0 -161
  200. package/.docs/raw/docs/integrations/observability/langsmith.mdx +0 -151
  201. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +0 -773
  202. package/.docs/raw/docs/migrations/deprecation-policy.mdx +0 -42
  203. package/.docs/raw/docs/migrations/index.mdx +0 -50
  204. package/.docs/raw/docs/migrations/react-compatibility.mdx +0 -74
  205. package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +0 -328
  206. package/.docs/raw/docs/migrations/toolkit-tools.mdx +0 -236
  207. package/.docs/raw/docs/migrations/v0-11.mdx +0 -172
  208. package/.docs/raw/docs/migrations/v0-12.mdx +0 -302
  209. package/.docs/raw/docs/migrations/v0-14.mdx +0 -297
  210. package/.docs/raw/docs/migrations/v0-15.mdx +0 -270
  211. package/.docs/raw/docs/primitives/action-bar.mdx +0 -352
  212. package/.docs/raw/docs/primitives/assistant-modal.mdx +0 -216
  213. package/.docs/raw/docs/primitives/attachment.mdx +0 -217
  214. package/.docs/raw/docs/primitives/branch-picker.mdx +0 -222
  215. package/.docs/raw/docs/primitives/chain-of-thought.mdx +0 -315
  216. package/.docs/raw/docs/primitives/composer.mdx +0 -659
  217. package/.docs/raw/docs/primitives/error.mdx +0 -142
  218. package/.docs/raw/docs/primitives/index.mdx +0 -99
  219. package/.docs/raw/docs/primitives/message.mdx +0 -618
  220. package/.docs/raw/docs/primitives/selection-toolbar.mdx +0 -191
  221. package/.docs/raw/docs/primitives/suggestion.mdx +0 -254
  222. package/.docs/raw/docs/primitives/thread-list.mdx +0 -467
  223. package/.docs/raw/docs/primitives/thread.mdx +0 -509
  224. package/.docs/raw/docs/react-native/adapters.mdx +0 -94
  225. package/.docs/raw/docs/react-native/custom-backend.mdx +0 -207
  226. package/.docs/raw/docs/react-native/hooks.mdx +0 -339
  227. package/.docs/raw/docs/react-native/index.mdx +0 -289
  228. package/.docs/raw/docs/react-native/migration.mdx +0 -142
  229. package/.docs/raw/docs/react-native/primitives.mdx +0 -976
  230. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +0 -399
  231. package/.docs/raw/docs/runtimes/a2a/overview.mdx +0 -60
  232. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +0 -216
  233. package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +0 -124
  234. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +0 -70
  235. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +0 -243
  236. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +0 -267
  237. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +0 -61
  238. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +0 -122
  239. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +0 -135
  240. package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +0 -636
  241. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +0 -731
  242. package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +0 -118
  243. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +0 -265
  244. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +0 -167
  245. package/.docs/raw/docs/runtimes/concepts/stability.mdx +0 -68
  246. package/.docs/raw/docs/runtimes/concepts/threads.mdx +0 -513
  247. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +0 -763
  248. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +0 -339
  249. package/.docs/raw/docs/runtimes/custom/external-store.mdx +0 -957
  250. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +0 -902
  251. package/.docs/raw/docs/runtimes/custom/overview.mdx +0 -71
  252. package/.docs/raw/docs/runtimes/eve/overview.mdx +0 -151
  253. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +0 -192
  254. package/.docs/raw/docs/runtimes/google-adk/api.mdx +0 -256
  255. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +0 -784
  256. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +0 -69
  257. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +0 -229
  258. package/.docs/raw/docs/runtimes/langchain.mdx +0 -901
  259. package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +0 -181
  260. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +0 -305
  261. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +0 -104
  262. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +0 -84
  263. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +0 -496
  264. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +0 -144
  265. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +0 -113
  266. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +0 -29
  267. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -93
  268. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +0 -347
  269. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +0 -393
  270. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +0 -194
  271. package/.docs/raw/docs/runtimes/opencode/overview.mdx +0 -58
  272. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +0 -119
  273. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +0 -133
  274. package/.docs/raw/docs/tools/a2ui.mdx +0 -107
  275. package/.docs/raw/docs/tools/backend.mdx +0 -147
  276. package/.docs/raw/docs/tools/defining-tools.mdx +0 -574
  277. package/.docs/raw/docs/tools/dynamic-tools.mdx +0 -112
  278. package/.docs/raw/docs/tools/generative-ui-primitive.mdx +0 -180
  279. package/.docs/raw/docs/tools/generative-ui-slack.mdx +0 -167
  280. package/.docs/raw/docs/tools/generative-ui-teams.mdx +0 -160
  281. package/.docs/raw/docs/tools/generative-ui.mdx +0 -322
  282. package/.docs/raw/docs/tools/index.mdx +0 -72
  283. package/.docs/raw/docs/tools/interactables.mdx +0 -1084
  284. package/.docs/raw/docs/tools/mcp-apps.mdx +0 -363
  285. package/.docs/raw/docs/tools/mcp.mdx +0 -466
  286. package/.docs/raw/docs/tools/multi-agent.mdx +0 -237
  287. package/.docs/raw/docs/tools/openui.mdx +0 -175
  288. package/.docs/raw/docs/tools/tool-ui.mdx +0 -1020
  289. package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
  290. package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
  291. package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
  292. package/.docs/raw/docs/ui/attachment.mdx +0 -279
  293. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -247
  294. package/.docs/raw/docs/ui/context-display.mdx +0 -148
  295. package/.docs/raw/docs/ui/directive-text.mdx +0 -114
  296. package/.docs/raw/docs/ui/file.mdx +0 -159
  297. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
  298. package/.docs/raw/docs/ui/image.mdx +0 -102
  299. package/.docs/raw/docs/ui/markdown.mdx +0 -103
  300. package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
  301. package/.docs/raw/docs/ui/mermaid.mdx +0 -92
  302. package/.docs/raw/docs/ui/message-timing.mdx +0 -93
  303. package/.docs/raw/docs/ui/model-selector.mdx +0 -455
  304. package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
  305. package/.docs/raw/docs/ui/quote.mdx +0 -211
  306. package/.docs/raw/docs/ui/reasoning.mdx +0 -214
  307. package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
  308. package/.docs/raw/docs/ui/sources.mdx +0 -186
  309. package/.docs/raw/docs/ui/streamdown.mdx +0 -392
  310. package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
  311. package/.docs/raw/docs/ui/thread-list.mdx +0 -411
  312. package/.docs/raw/docs/ui/thread.mdx +0 -559
  313. package/.docs/raw/docs/ui/tool-fallback.mdx +0 -141
  314. package/.docs/raw/docs/ui/tool-group.mdx +0 -240
  315. package/.docs/raw/docs/ui/voice.mdx +0 -173
  316. package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
  317. package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
  318. package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
  319. package/dist/constants.d.ts +0 -14
  320. package/dist/constants.d.ts.map +0 -1
  321. package/dist/constants.js +0 -19
  322. package/dist/constants.js.map +0 -1
  323. package/dist/prepare-docs/code-examples.d.ts +0 -5
  324. package/dist/prepare-docs/code-examples.d.ts.map +0 -1
  325. package/dist/prepare-docs/code-examples.js +0 -117
  326. package/dist/prepare-docs/code-examples.js.map +0 -1
  327. package/dist/prepare-docs/copy-raw.d.ts +0 -5
  328. package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
  329. package/dist/prepare-docs/copy-raw.js +0 -49
  330. package/dist/prepare-docs/copy-raw.js.map +0 -1
  331. package/dist/prepare-docs/prepare.d.ts +0 -1
  332. package/dist/prepare-docs/prepare.js +0 -22
  333. package/dist/prepare-docs/prepare.js.map +0 -1
  334. package/dist/prompts/xulux-playground.d.ts +0 -12
  335. package/dist/prompts/xulux-playground.d.ts.map +0 -1
  336. package/dist/prompts/xulux-playground.js +0 -33
  337. package/dist/prompts/xulux-playground.js.map +0 -1
  338. package/dist/tools/docs.d.ts +0 -22
  339. package/dist/tools/docs.d.ts.map +0 -1
  340. package/dist/tools/docs.js +0 -177
  341. package/dist/tools/docs.js.map +0 -1
  342. package/dist/tools/examples.d.ts +0 -24
  343. package/dist/tools/examples.d.ts.map +0 -1
  344. package/dist/tools/examples.js +0 -87
  345. package/dist/tools/examples.js.map +0 -1
  346. package/dist/tools/resources.d.ts +0 -6
  347. package/dist/tools/resources.d.ts.map +0 -1
  348. package/dist/tools/resources.js +0 -75
  349. package/dist/tools/resources.js.map +0 -1
  350. package/dist/tools/search.d.ts +0 -24
  351. package/dist/tools/search.d.ts.map +0 -1
  352. package/dist/tools/search.js +0 -39
  353. package/dist/tools/search.js.map +0 -1
  354. package/dist/tools/tests/mcp-test-client.d.ts +0 -15
  355. package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
  356. package/dist/tools/tests/mcp-test-client.js +0 -68
  357. package/dist/tools/tests/mcp-test-client.js.map +0 -1
  358. package/dist/tools/tests/test-setup.d.ts +0 -7
  359. package/dist/tools/tests/test-setup.d.ts.map +0 -1
  360. package/dist/tools/tests/test-setup.js +0 -36
  361. package/dist/tools/tests/test-setup.js.map +0 -1
  362. package/dist/tools/xulux-templates.d.ts +0 -58
  363. package/dist/tools/xulux-templates.d.ts.map +0 -1
  364. package/dist/tools/xulux-templates.js +0 -84
  365. package/dist/tools/xulux-templates.js.map +0 -1
  366. package/dist/utils/cache.d.ts +0 -5
  367. package/dist/utils/cache.d.ts.map +0 -1
  368. package/dist/utils/cache.js +0 -18
  369. package/dist/utils/cache.js.map +0 -1
  370. package/dist/utils/logger.d.ts +0 -10
  371. package/dist/utils/logger.d.ts.map +0 -1
  372. package/dist/utils/logger.js +0 -20
  373. package/dist/utils/logger.js.map +0 -1
  374. package/dist/utils/mcp-format.d.ts +0 -11
  375. package/dist/utils/mcp-format.d.ts.map +0 -1
  376. package/dist/utils/mcp-format.js +0 -14
  377. package/dist/utils/mcp-format.js.map +0 -1
  378. package/dist/utils/mdx.d.ts +0 -12
  379. package/dist/utils/mdx.d.ts.map +0 -1
  380. package/dist/utils/mdx.js +0 -45
  381. package/dist/utils/mdx.js.map +0 -1
  382. package/dist/utils/paths.d.ts +0 -12
  383. package/dist/utils/paths.d.ts.map +0 -1
  384. package/dist/utils/paths.js +0 -93
  385. package/dist/utils/paths.js.map +0 -1
  386. package/dist/utils/search.d.ts +0 -10
  387. package/dist/utils/search.d.ts.map +0 -1
  388. package/dist/utils/search.js +0 -97
  389. package/dist/utils/search.js.map +0 -1
  390. package/dist/utils/security.d.ts +0 -5
  391. package/dist/utils/security.d.ts.map +0 -1
  392. package/dist/utils/security.js +0 -22
  393. package/dist/utils/security.js.map +0 -1
  394. package/dist/xulux/catalog-client.d.ts +0 -14
  395. package/dist/xulux/catalog-client.d.ts.map +0 -1
  396. package/dist/xulux/catalog-client.js +0 -112
  397. package/dist/xulux/catalog-client.js.map +0 -1
  398. package/dist/xulux/fallback-catalog.d.ts +0 -7
  399. package/dist/xulux/fallback-catalog.d.ts.map +0 -1
  400. package/dist/xulux/fallback-catalog.js +0 -47
  401. package/dist/xulux/fallback-catalog.js.map +0 -1
  402. package/dist/xulux/fetch-sandbox.d.ts +0 -5
  403. package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
  404. package/dist/xulux/fetch-sandbox.js +0 -40
  405. package/dist/xulux/fetch-sandbox.js.map +0 -1
  406. package/dist/xulux/template-service.d.ts +0 -84
  407. package/dist/xulux/template-service.d.ts.map +0 -1
  408. package/dist/xulux/template-service.js +0 -223
  409. package/dist/xulux/template-service.js.map +0 -1
  410. package/dist/xulux/types.d.ts +0 -55
  411. package/dist/xulux/types.d.ts.map +0 -1
  412. package/dist/xulux/types.js +0 -6
  413. package/dist/xulux/types.js.map +0 -1
  414. package/src/constants.ts +0 -24
  415. package/src/prepare-docs/code-examples.ts +0 -158
  416. package/src/prepare-docs/copy-raw.ts +0 -50
  417. package/src/prepare-docs/prepare.ts +0 -24
  418. package/src/prompts/xulux-playground.ts +0 -36
  419. package/src/tools/docs.ts +0 -255
  420. package/src/tools/examples.ts +0 -114
  421. package/src/tools/resources.ts +0 -111
  422. package/src/tools/search.ts +0 -46
  423. package/src/tools/tests/completions.test.ts +0 -60
  424. package/src/tools/tests/directory-size-cap.test.ts +0 -50
  425. package/src/tools/tests/docs.test.ts +0 -147
  426. package/src/tools/tests/examples.test.ts +0 -94
  427. package/src/tools/tests/integration.test.ts +0 -45
  428. package/src/tools/tests/json-parsing.test.ts +0 -23
  429. package/src/tools/tests/listings-cache.test.ts +0 -19
  430. package/src/tools/tests/mcp-protocol.test.ts +0 -216
  431. package/src/tools/tests/mcp-test-client.ts +0 -111
  432. package/src/tools/tests/path-traversal.test.ts +0 -84
  433. package/src/tools/tests/resources.test.ts +0 -133
  434. package/src/tools/tests/search.test.ts +0 -37
  435. package/src/tools/tests/test-setup.ts +0 -50
  436. package/src/tools/tests/xulux-templates.test.ts +0 -325
  437. package/src/tools/xulux-templates.ts +0 -141
  438. package/src/utils/cache.ts +0 -20
  439. package/src/utils/logger.ts +0 -20
  440. package/src/utils/mcp-format.ts +0 -14
  441. package/src/utils/mdx.ts +0 -59
  442. package/src/utils/paths.ts +0 -139
  443. package/src/utils/search.ts +0 -131
  444. package/src/utils/security.ts +0 -52
  445. package/src/utils/tests/cache.test.ts +0 -51
  446. package/src/utils/tests/mcp-format.test.ts +0 -22
  447. package/src/utils/tests/security.test.ts +0 -119
  448. package/src/xulux/catalog-client.ts +0 -150
  449. package/src/xulux/fallback-catalog.ts +0 -63
  450. package/src/xulux/fetch-sandbox.ts +0 -56
  451. package/src/xulux/template-service.ts +0 -406
  452. package/src/xulux/types.ts +0 -64
@@ -1,466 +0,0 @@
1
- ---
2
- title: Model Context Protocol (MCP)
3
- description: Connect MCP servers as a tool catalog in your assistant-ui app.
4
- ---
5
-
6
- [MCP](https://modelcontextprotocol.io/) is an open protocol for exposing tools, resources, and prompts to LLMs. One MCP server can publish many tools (file system, GitHub, Slack, your own service) and any MCP-aware client can use them. The AI SDK has a built-in MCP client; this page is the wiring guide for plugging it into an assistant-ui app.
7
-
8
- ## How it works
9
-
10
- ```mermaid
11
- flowchart LR
12
- client["client"] --> api["/api/chat"] --> mcp["MCP client"] --> server["MCP server<br/>(HTTP, SSE, stdio)"]
13
- mcp --> tools["tools()"] --> stream["passed to<br/>streamText({ tools })"]
14
- ```
15
-
16
- The MCP client lives on the server inside your AI SDK route handler. It connects to one or more MCP servers, calls `tools()` to get a tool map, and hands that map to `streamText`. assistant-ui's existing tool-call UI (`ToolFallback`, or toolkit entries with `render`) renders the results.
17
-
18
- <Callout type="info">
19
- If you use a `"use generative"` toolkit, spread `defineMcpToolkit({ ... })`
20
- in the toolkit and use `AISDKToolkit` in your route. It opens the MCP clients,
21
- merges their tools with your toolkit, and closes them for you.
22
- </Callout>
23
-
24
- ## Setup
25
-
26
- <Steps>
27
- <Step>
28
-
29
- ### Install the MCP client
30
-
31
- <InstallCommand npm={["@ai-sdk/mcp"]} />
32
-
33
- For stdio transports (local dev only), also install the official MCP SDK:
34
-
35
- <InstallCommand npm={["@modelcontextprotocol/sdk"]} />
36
-
37
- </Step>
38
- <Step>
39
-
40
- ### Connect to an MCP server
41
-
42
- Set the server URL and any auth token your server requires:
43
-
44
- ```sh title=".env.local"
45
- MCP_SERVER_URL=https://your-mcp-server.example/mcp
46
- MCP_TOKEN=...
47
- ```
48
-
49
- Then inside your AI SDK route handler, create the client with the transport that matches your server. **HTTP** is the production transport; **SSE** is the legacy streaming transport; **stdio** spawns a local process and is dev-only.
50
-
51
- ```ts title="app/api/chat/route.ts"
52
- import { createMCPClient } from "@ai-sdk/mcp";
53
-
54
- const mcpClient = await createMCPClient({
55
- transport: {
56
- type: "http",
57
- url: process.env.MCP_SERVER_URL!,
58
- headers: { Authorization: `Bearer ${process.env.MCP_TOKEN}` },
59
- },
60
- });
61
- ```
62
-
63
- For stdio:
64
-
65
- ```ts
66
- import { createMCPClient } from "@ai-sdk/mcp";
67
- import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
68
-
69
- const mcpClient = await createMCPClient({
70
- transport: new StdioClientTransport({
71
- command: "node",
72
- args: ["./mcp-server/dist/index.js"],
73
- }),
74
- });
75
- ```
76
-
77
- </Step>
78
- <Step>
79
-
80
- ### Define MCP servers in your toolkit
81
-
82
- In a generative toolkit, spread `defineMcpToolkit({ ... })` with one entry per
83
- MCP server. The entry key names the server connection; the MCP server publishes
84
- the actual tool names. Use a readable key because it appears in connection,
85
- tool-listing, and close errors for debugging.
86
-
87
- ```tsx title="app/toolkit.tsx"
88
- "use generative";
89
-
90
- import { defineMcpToolkit, defineToolkit } from "@assistant-ui/react";
91
-
92
- export default defineToolkit({
93
- ...defineMcpToolkit({
94
- github: {
95
- type: "http",
96
- url: "https://mcp.example.com/mcp",
97
- connectionTimeout: 10_000,
98
- },
99
- }),
100
- });
101
- ```
102
-
103
- Use `{ server, disabled }` when a whole MCP server should stay configured but
104
- not expose tools for the current request, such as missing credentials, feature
105
- flags, or plan gating:
106
-
107
- ```tsx
108
- defineMcpToolkit({
109
- docs: {
110
- server: {
111
- type: "http",
112
- url: process.env.DOCS_MCP_URL!,
113
- },
114
- disabled: !process.env.DOCS_MCP_URL,
115
- },
116
- });
117
- ```
118
-
119
- Use `tools` when the server should stay enabled but specific MCP tools should
120
- be hidden from the model:
121
-
122
- ```tsx
123
- defineMcpToolkit({
124
- docs: {
125
- server: {
126
- type: "http",
127
- url: process.env.DOCS_MCP_URL!,
128
- },
129
- tools: {
130
- deleteDocument: {
131
- disabled: !userCanDelete,
132
- },
133
- },
134
- },
135
- });
136
- ```
137
-
138
- If multiple MCP servers expose the same tool name, wrap the entry with
139
- `{ server, prefix }` to give each server's tools distinct model-visible names:
140
-
141
- ```tsx
142
- export default defineToolkit({
143
- ...defineMcpToolkit({
144
- docs: {
145
- server: { type: "http", url: "https://docs.example.com/mcp" },
146
- prefix: "docs_",
147
- },
148
- github: {
149
- server: { type: "http", url: "https://github.example.com/mcp" },
150
- prefix: "github_",
151
- },
152
- }),
153
- });
154
- ```
155
-
156
- If both servers publish `search`, the model receives `docs_search` and
157
- `github_search` instead of an ambiguous duplicate.
158
-
159
- Use `AISDKToolkit` in the route. It opens the MCP clients, merges their tools
160
- with the rest of your toolkit, and closes them when you call `close()`:
161
-
162
- `connectionTimeout` is optional and measured in milliseconds. Set it to fail
163
- the server-side MCP readiness flow (`createMCPClient()` plus `tools()`) before
164
- a bad URL or hanging local process can stall the route.
165
-
166
- ```ts title="app/api/chat/route.ts"
167
- import { AISDKToolkit } from "@assistant-ui/ai-sdk";
168
- import { openai } from "@ai-sdk/openai";
169
- import { streamText, convertToModelMessages } from "ai";
170
- import type { UIMessage } from "ai";
171
- import toolkit from "../../toolkit";
172
-
173
- export async function POST(req: Request) {
174
- const { messages, tools }: { messages: UIMessage[]; tools?: Record<string, any> } =
175
- await req.json();
176
-
177
- const aiToolkit = new AISDKToolkit({ toolkit });
178
-
179
- const result = streamText({
180
- model: openai("gpt-5.6-luna"),
181
- messages: await convertToModelMessages(messages),
182
- tools: await aiToolkit.tools({ frontend: tools }),
183
- onFinish: async () => {
184
- await aiToolkit.close();
185
- },
186
- });
187
-
188
- return result.toUIMessageStreamResponse();
189
- }
190
- ```
191
-
192
- </Step>
193
- <Step>
194
-
195
- ### Wire the tools into the route
196
-
197
- For manual MCP client control, `mcpClient.tools()` returns an object shaped
198
- exactly like the `tools` argument of `streamText`. Spread it in alongside any of
199
- your own tools, and close the client when the response finishes:
200
-
201
- ```ts title="app/api/chat/route.ts"
202
- import { createMCPClient } from "@ai-sdk/mcp";
203
- import { openai } from "@ai-sdk/openai";
204
- import { streamText, convertToModelMessages } from "ai";
205
- import type { UIMessage } from "ai";
206
-
207
- export const maxDuration = 60;
208
-
209
- export async function POST(req: Request) {
210
- const { messages }: { messages: UIMessage[] } = await req.json();
211
-
212
- const mcpClient = await createMCPClient({
213
- transport: {
214
- type: "http",
215
- url: process.env.MCP_SERVER_URL!,
216
- headers: { Authorization: `Bearer ${process.env.MCP_TOKEN}` },
217
- },
218
- });
219
-
220
- const tools = await mcpClient.tools();
221
-
222
- const result = streamText({
223
- model: openai("gpt-5.6-luna"),
224
- messages: await convertToModelMessages(messages),
225
- tools,
226
- onFinish: async () => {
227
- await mcpClient.close();
228
- },
229
- });
230
-
231
- return result.toUIMessageStreamResponse();
232
- }
233
- ```
234
-
235
- `onFinish` is the right place to call `close()`: it fires after the stream completes, so the connection stays open as long as the model is still calling tools.
236
-
237
- </Step>
238
- <Step>
239
-
240
- ### Combine multiple MCP servers
241
-
242
- Each server has its own client. Spread their tool maps together:
243
-
244
- ```ts
245
- const githubClient = await createMCPClient({
246
- transport: { type: "http", url: process.env.GITHUB_MCP_URL! },
247
- });
248
- const filesClient = await createMCPClient({
249
- transport: { type: "http", url: process.env.FILES_MCP_URL! },
250
- });
251
-
252
- const tools = {
253
- ...(await githubClient.tools()),
254
- ...(await filesClient.tools()),
255
- };
256
-
257
- // remember to close both in onFinish
258
- ```
259
-
260
- If two servers expose tools with the same name, the later spread wins. Rename or scope as needed.
261
-
262
- </Step>
263
- <Step>
264
-
265
- ### Render results in the UI
266
-
267
- Tool calls flow through the existing assistant-ui tool-call rendering. With no
268
- setup, the bundled `<ToolFallback>` component renders the call name, arguments,
269
- and result. To customize the appearance for a specific tool in a generative
270
- toolkit, add an `externalTool()` renderer whose key matches the MCP tool name:
271
-
272
- <PlatformTabs>
273
- <Tab value="React">
274
-
275
- ```tsx title="app/toolkit.tsx"
276
- "use generative";
277
-
278
- import { defineMcpToolkit, defineToolkit, externalTool } from "@assistant-ui/react";
279
-
280
- type Args = { repo: string; number: number };
281
- type Result = { title: string; state: string; url: string };
282
-
283
- export default defineToolkit({
284
- ...defineMcpToolkit({
285
- github: { type: "http", url: "https://mcp.example.com/mcp" },
286
- }),
287
- github_get_issue: {
288
- execute: externalTool(),
289
- render: ({ args, result }: { args: Args; result?: Result }) => (
290
- <div className="rounded border p-3">
291
- <div className="font-mono text-sm">{args.repo}#{args.number}</div>
292
- {result && (
293
- <a href={result.url} className="underline">
294
- {result.title} ({result.state})
295
- </a>
296
- )}
297
- </div>
298
- ),
299
- },
300
- });
301
- ```
302
-
303
- </Tab>
304
- <Tab value="React Native">
305
-
306
- ```tsx title="components/GitHubIssueToolUI.tsx"
307
- import { defineToolkit } from "@assistant-ui/react-native";
308
- import { Linking, Pressable, Text, View } from "react-native";
309
-
310
- type Args = { repo: string; number: number };
311
- type Result = { title: string; state: string; url: string };
312
-
313
- export const toolkit = defineToolkit({
314
- github_get_issue: {
315
- type: "backend",
316
- render: ({ args, result }: { args: Args; result?: Result }) => (
317
- <View style={{ borderWidth: 1, borderRadius: 6, padding: 12 }}>
318
- <Text style={{ fontFamily: "Menlo", fontSize: 13 }}>
319
- {args.repo}#{args.number}
320
- </Text>
321
- {result && (
322
- <Pressable onPress={() => Linking.openURL(result.url)}>
323
- <Text style={{ textDecorationLine: "underline" }}>
324
- {result.title} ({result.state})
325
- </Text>
326
- </Pressable>
327
- )}
328
- </View>
329
- ),
330
- },
331
- });
332
- ```
333
-
334
- </Tab>
335
- <Tab value="React Ink">
336
-
337
- ```tsx title="components/GitHubIssueToolUI.tsx"
338
- import { defineToolkit } from "@assistant-ui/react-ink";
339
- import { Box, Text } from "ink";
340
-
341
- type Args = { repo: string; number: number };
342
- type Result = { title: string; state: string; url: string };
343
-
344
- export const toolkit = defineToolkit({
345
- github_get_issue: {
346
- type: "backend",
347
- render: ({ args, result }: { args: Args; result?: Result }) => (
348
- <Box borderStyle="round" paddingX={1} flexDirection="column">
349
- <Text>
350
- {args.repo}#{args.number}
351
- </Text>
352
- {result && (
353
- <Text>
354
- {result.title} ({result.state}) — {result.url}
355
- </Text>
356
- )}
357
- </Box>
358
- ),
359
- },
360
- });
361
- ```
362
-
363
- </Tab>
364
- </PlatformTabs>
365
-
366
- Register the toolkit once with `Tools({ toolkit })`. Renderer keys such as
367
- `github_get_issue` must match the tool names your MCP server publishes.
368
-
369
- ```tsx title="app/components/RuntimeProvider.tsx"
370
- "use client";
371
-
372
- import { AssistantRuntimeProvider, AuiConfig, Tools } from "@assistant-ui/react";
373
- import { useChatRuntime } from "@assistant-ui/ai-sdk";
374
- import type { ReactNode } from "react";
375
-
376
- import { toolkit } from "./GitHubIssueToolUI";
377
-
378
- export function MyRuntimeProvider({ children }: { children: ReactNode }) {
379
- const runtime = useChatRuntime();
380
- const config = AuiConfig({ tools: Tools({ toolkit }) });
381
- return (
382
- <AssistantRuntimeProvider
383
- runtime={runtime}
384
- config={config}
385
- >
386
- {children}
387
- </AssistantRuntimeProvider>
388
- );
389
- }
390
- ```
391
-
392
- `useChatRuntime()` targets `/api/chat` by default. To point at a different endpoint or customize requests, see [Custom transport](/docs/runtimes/ai-sdk/v7#custom-transport).
393
-
394
- </Step>
395
- <Step>
396
-
397
- ### Require approval before an MCP tool runs
398
-
399
- MCP tools execute on the server, so approval is a server-side tool gate, not a `humanTool()` result. Gate the call with AI SDK v7's call-level `toolApproval` option, keyed by the tool's model-visible name. The tool name stays the same, so your custom renderer or the default `ToolFallback` receives `approval` and `respondToApproval` like any other backend tool:
400
-
401
- ```ts title="app/api/chat/route.ts"
402
- const tools = await mcpClient.tools();
403
-
404
- const result = streamText({
405
- model: openai("gpt-5.6-luna"),
406
- messages: await convertToModelMessages(messages),
407
- tools,
408
- toolApproval: {
409
- github_delete_repository: "user-approval",
410
- },
411
- onFinish: async () => {
412
- await mcpClient.close();
413
- },
414
- });
415
- ```
416
-
417
- With `AISDKToolkit`, pass the same `toolApproval` option alongside the tools returned by `await aiToolkit.tools(...)`; key it by the prefixed name when the entry sets one.
418
-
419
- On the client, let the AI SDK send the recorded approval decision back to the
420
- route:
421
-
422
- ```tsx title="app/components/RuntimeProvider.tsx"
423
- import { lastAssistantMessageIsCompleteWithApprovalResponses } from "ai";
424
-
425
- const runtime = useChatRuntime({
426
- sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,
427
- });
428
- ```
429
-
430
- Use this pattern for backend-owned actions such as deleting, writing, deploying, or calling privileged MCP tools. Use `humanTool()` only when the user supplies the tool result itself. For custom approval UIs, see [Server-side approval gates](/docs/tools/tool-ui#server-side-approval-gates); for the full wire setup, see [Server-side tool approval](/docs/runtimes/ai-sdk/v7#server-side-tool-approval).
431
-
432
- </Step>
433
- <Step>
434
-
435
- ### Run and verify
436
-
437
- Start the app and trigger a tool call (e.g., ask the assistant to do something the MCP server can do). Confirm:
438
-
439
- - The tool call appears in the chat with the expected arguments.
440
- - The result renders (either via your custom `ToolUI` or the fallback).
441
- - No connection leaks: the MCP client closes after each response. If you see open connections accumulating, check `onFinish`.
442
-
443
- </Step>
444
- </Steps>
445
-
446
- ## Notes
447
-
448
- - **Server-side only.** The MCP client uses Node APIs (sockets, optionally child processes). Never instantiate it in client code.
449
- - **Per-request lifecycle.** A fresh client per request keeps connection state simple. For high-throughput servers, pool clients yourself with care: the AI SDK's `tools()` call assumes the connection is alive when `streamText` runs.
450
- - **Sampling.** If your MCP server uses `sampling/createMessage` (lets the server ask the LLM mid-call), assistant-cloud users can instrument it via [`instrumentMcpSampling`](/docs/cloud) for observability. This is independent of the wiring above.
451
- - **Transport choice.** HTTP for any networked server. SSE only if the server doesn't speak HTTP. stdio is for local development against an MCP server in your monorepo.
452
-
453
- ## Related
454
-
455
- <Cards>
456
- <Card
457
- title="AI SDK runtime"
458
- description="The runtime that ferries MCP tool calls to the chat UI."
459
- href="/docs/runtimes/ai-sdk/v7"
460
- />
461
- <Card
462
- title="Tools and tool UI"
463
- description="Build custom renderers for tool calls and approvals."
464
- href="/docs/tools/defining-tools"
465
- />
466
- </Cards>
@@ -1,237 +0,0 @@
1
- ---
2
- title: Multi-Agent Chat UI
3
- description: Render sub-agent conversations and handoffs inside tool calls. Build supervisor and multi-agent patterns in a React chat UI with assistant-ui.
4
- platforms: ["react"]
5
- ---
6
-
7
- In a multi-agent (orchestrator) architecture, a main agent invokes sub-agents via tool calls. Each sub-agent may produce its own conversation (user/assistant messages, tool calls, etc.). assistant-ui supports rendering these nested conversations using the `MessagePartPrimitive.Messages` primitive.
8
-
9
- ## Overview
10
-
11
- When a tool call includes a `messages` field (`ToolCallMessagePart.messages`), it represents a sub-agent's conversation history. `MessagePartPrimitive.Messages` reads this field from the current tool call part and renders it as a nested thread.
12
-
13
- Key behaviors:
14
-
15
- - **Scope inheritance** — Parent toolkit renderers are available in sub-agent messages. A `Tools({ toolkit })` registration at the top level works inside sub-agent conversations too.
16
- - **Recursive** — Sub-agent messages can contain tool calls that themselves have nested messages. Just use `MessagePartPrimitive.Messages` again.
17
- - **Read-only** — Sub-agent messages are rendered in a readonly context. No editing, branching, or composing.
18
-
19
- <Callout type="info">
20
- This renders a sub-agent's **messages**. To visualize a sub-agent's **execution trace** instead (timing, span hierarchy, waterfalls), see [react-o11y](/docs/utilities/react-o11y), which renders observability spans as collapsible trees and timelines.
21
- </Callout>
22
-
23
- ## Quick Start
24
-
25
- <Steps>
26
- <Step>
27
-
28
- ### Register a Tool UI for the Sub-Agent
29
-
30
- ```tsx
31
- import {
32
- defineToolkit,
33
- Tools,
34
- MessagePartPrimitive,
35
- } from "@assistant-ui/react";
36
-
37
- const toolkit = defineToolkit({
38
- invoke_researcher: {
39
- type: "backend",
40
- render: ({ args, status }) => (
41
- <div className="my-2 rounded-lg border p-4">
42
- <div className="mb-2 text-sm font-medium text-gray-500">
43
- Researcher Agent {status.type === "running" && "(working...)"}
44
- </div>
45
- <MessagePartPrimitive.Messages>
46
- {({ message }) => {
47
- if (message.role === "user") return <MyUserMessage />;
48
- return <MyAssistantMessage />;
49
- }}
50
- </MessagePartPrimitive.Messages>
51
- </div>
52
- ),
53
- },
54
- });
55
- ```
56
-
57
- </Step>
58
- <Step>
59
-
60
- ### Provide the Messages from the Backend
61
-
62
- Your backend must populate the `messages` field on the tool call result.
63
-
64
- <Tabs items={["AI SDK", "LangGraph"]}>
65
- <Tab value="AI SDK">
66
-
67
- ```ts title="api/chat/route.ts"
68
- tools: {
69
- invoke_researcher: tool({
70
- description: "Invoke the researcher sub-agent",
71
- parameters: z.object({ query: z.string() }),
72
- execute: async ({ query }) => {
73
- const subAgentMessages = await runResearcherAgent(query);
74
- return {
75
- answer: subAgentMessages.at(-1)?.content,
76
- messages: subAgentMessages,
77
- };
78
- },
79
- }),
80
- },
81
- ```
82
-
83
- </Tab>
84
- <Tab value="LangGraph">
85
-
86
- With `@assistant-ui/react-langgraph`, use `unstable_createLangGraphStream` and set `unstable_allowCancellation: true` to wire up the stop button. When your graph runs a subgraph, the subgraph's messages appear on `ToolCallMessagePart.messages` automatically once you handle the `onSubgraphValues` / `onSubgraphUpdates` events.
87
-
88
- ```ts title="runtime.ts"
89
- import {
90
- useLangGraphRuntime,
91
- unstable_createLangGraphStream,
92
- } from "@assistant-ui/react-langgraph";
93
-
94
- const runtime = useLangGraphRuntime({
95
- unstable_allowCancellation: true,
96
- stream: unstable_createLangGraphStream({
97
- client,
98
- assistantId,
99
- // "custom" is required for generative UI; "updates" for subgraph events
100
- streamMode: ["messages", "updates", "custom"],
101
- // abort the run server-side when the user clicks stop
102
- onDisconnect: "cancel",
103
- }),
104
- eventHandlers: {
105
- onSubgraphValues: (namespace, values) => {
106
- // namespace = e.g. "tools:call_abc" — the sub-agent's node path
107
- // values contains the subgraph state, including its messages array
108
- },
109
- onSubgraphUpdates: (namespace, updates) => {
110
- // incremental state updates from the subgraph
111
- },
112
- onSubgraphError: (namespace, error) => {
113
- // error scoped to the subgraph; does not mark the parent message failed
114
- },
115
- onMessageChunk: (chunk, metadata) => {
116
- // metadata.namespace is set when the chunk originates from a subgraph
117
- // use it to attribute the chunk to the correct sub-agent
118
- },
119
- },
120
- });
121
- ```
122
-
123
- See [LangGraph Streaming](/docs/runtimes/langgraph/streaming) for the full event handler reference.
124
-
125
- </Tab>
126
- </Tabs>
127
-
128
- <Callout type="info">
129
- The key requirement is that the tool result's corresponding
130
- `ToolCallMessagePart` includes a `messages` array of `ThreadMessage` objects.
131
- </Callout>
132
-
133
- </Step>
134
- <Step>
135
-
136
- ### Register the Tool UI Component
137
-
138
- ```tsx
139
- function App() {
140
- return (
141
- <AssistantRuntimeProvider runtime={runtime}>
142
- <Thread />
143
- <ResearchAgentToolUI />
144
- </AssistantRuntimeProvider>
145
- );
146
- }
147
- ```
148
-
149
- </Step>
150
- </Steps>
151
-
152
- ## Subgraph Namespace Events
153
-
154
- When using LangGraph, subgraph events (`onSubgraphValues` / `onSubgraphUpdates` / `onSubgraphError`, plus the `namespace` on `onMessageChunk`) carry a `namespace` that identifies which sub-agent emitted them, letting you attribute messages and state to specific sub-agents. See [LangGraph Streaming](/docs/runtimes/langgraph/streaming) for the full reference.
155
-
156
- ## Recursive Sub-Agents
157
-
158
- If a sub-agent's tool calls also have nested messages, the same pattern applies recursively:
159
-
160
- ```tsx
161
- const toolkit = defineToolkit({
162
- invoke_planner: {
163
- type: "backend",
164
- render: () => (
165
- <div className="rounded border p-3">
166
- <h4>Planner Agent</h4>
167
- <MessagePartPrimitive.Messages>
168
- {({ message }) => {
169
- if (message.role === "user") return <MyUserMessage />;
170
- return (
171
- <MessagePrimitive.Parts>
172
- {({ part }) => {
173
- if (part.type === "text") return <MyText />;
174
- if (part.type === "tool-call" && part.toolName === "invoke_researcher") return (
175
- <div className="ml-4 rounded border p-3">
176
- <h5>Researcher Agent</h5>
177
- {/* Nested sub-agent renders recursively */}
178
- <MessagePartPrimitive.Messages>
179
- {({ message }) => {
180
- if (message.role === "user") return <MyUserMessage />;
181
- return <MyAssistantMessage />;
182
- }}
183
- </MessagePartPrimitive.Messages>
184
- </div>
185
- );
186
- if (part.type === "tool-call") return <MyToolFallback {...part} />;
187
- return null;
188
- }}
189
- </MessagePrimitive.Parts>
190
- );
191
- }}
192
- </MessagePartPrimitive.Messages>
193
- </div>
194
- ),
195
- },
196
- });
197
- ```
198
-
199
- ## ReadonlyThreadProvider
200
-
201
- For advanced use cases where you have a `ThreadMessage[]` array and want to render it as a thread outside of a tool call context, use `ReadonlyThreadProvider` directly:
202
-
203
- ```tsx
204
- import {
205
- ReadonlyThreadProvider,
206
- ThreadPrimitive,
207
- type ThreadMessage,
208
- } from "@assistant-ui/react";
209
-
210
- function SubConversation({
211
- messages,
212
- }: {
213
- messages: readonly ThreadMessage[];
214
- }) {
215
- return (
216
- <ReadonlyThreadProvider messages={messages}>
217
- <ThreadPrimitive.Messages>
218
- {({ message }) => {
219
- if (message.role === "user") return <MyUserMessage />;
220
- return <MyAssistantMessage />;
221
- }}
222
- </ThreadPrimitive.Messages>
223
- </ReadonlyThreadProvider>
224
- );
225
- }
226
- ```
227
-
228
- `ReadonlyThreadProvider` inherits the parent's tool UI registrations and model context through scope inheritance.
229
-
230
- ## Related
231
-
232
- - [Generative UI](/docs/tools/tool-ui) — Creating tool call UIs
233
- - [react-o11y](/docs/utilities/react-o11y) — Visualize sub-agent execution as collapsible span trees, waterfalls, and call timelines
234
- - [MessagePartPrimitive](/docs/api-reference/primitives/message-part) — API reference for message part primitives
235
- - [Sub-Agent Model Tracking](/docs/cloud/ai-sdk#sub-agent-model-tracking) — Track delegated model usage and costs in the Cloud dashboard
236
- - [LangGraph Streaming](/docs/runtimes/langgraph/streaming) — Event handlers, subgraph events, and message metadata
237
- - [LangGraph Generative UI](/docs/runtimes/langgraph/generative-ui) — Structured UI components emitted by your graph