@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,428 +0,0 @@
1
- ---
2
- title: User-managed MCP servers
3
- description: Let end users add and authenticate MCP servers from the browser with @assistant-ui/react-mcp.
4
- ---
5
-
6
- [`@assistant-ui/react-mcp`](https://npmjs.com/package/@assistant-ui/react-mcp) is the user-facing layer for MCP. Where the [server-side MCP guide](/docs/tools/mcp) wires a single fixed set of MCP servers into your API route, this package lets *end users* see a list of connectors, sign in via OAuth, paste a custom server URL, and have the resulting tool catalog flow into the chat — automatically.
7
-
8
- Two ways a server reaches the user:
9
-
10
- - **Connector** — a preset declared by the app developer with `defineConnector(...)`. The user just clicks Connect (and completes auth).
11
- - **Custom server** — the user supplies the URL, name, and auth in `<McpAddFormPrimitive>`. Hide the add UI to disable.
12
-
13
- Both flow through one connection lifecycle, one persisted state surface, and one tool registration path.
14
-
15
- ## How it works
16
-
17
- ```
18
- AuiConfig({ mcp: McpManagerResource({ connectors }) })
19
- │
20
- ├─ Resource — connection lifecycle, server lookup, OAuth/bearer auth
21
- ├─ Auto-mounts the modelContext scope when no chat runtime provides one
22
- └─ Registers connected tools as frontend tools — your chat sees them automatically
23
- ```
24
-
25
- The manager is a single resource. Mount it with `AuiProvider` like any other scope. OAuth (PKCE + RFC 7591 dynamic client registration), bearer, and "no auth" are first-class. Token refresh runs inside the MCP SDK on 401; this package mediates persistence and the redirect step.
26
-
27
- <Callout type="info">
28
- The [2026-07-28 spec revision](https://modelcontextprotocol.io/specification/2026-07-28/changelog) deprecates RFC 7591 dynamic client registration in favor of [Client ID Metadata Documents](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration#client-id-metadata-documents), which clients should prefer over DCR when the authorization server advertises `client_id_metadata_document_supported`. Dynamic client registration remains available for backwards compatibility with authorization servers that do not support CIMD, and the spec's deprecation policy sets a minimum twelve-month window before removal, so the flow described here keeps working. Against a CIMD-only authorization server that exposes no `registration_endpoint`, supply a pre-registered [`clientId`](#auth) instead.
29
- </Callout>
30
-
31
- ## Setup
32
-
33
- <Steps>
34
- <Step>
35
-
36
- ### Install
37
-
38
- <InstallCommand npm={["@assistant-ui/react-mcp"]} />
39
-
40
- </Step>
41
- <Step>
42
-
43
- ### Mount the manager
44
-
45
- Declare your connectors and provide the `mcp` scope via `AuiProvider`. No imperative hooks:
46
-
47
- ```tsx title="app/providers.tsx"
48
- "use client";
49
-
50
- import { AuiConfig, AuiProvider, useAui } from "@assistant-ui/react";
51
- import { McpManagerResource, defineConnector } from "@assistant-ui/react-mcp";
52
-
53
- const connectors = [
54
- defineConnector({
55
- id: "linear",
56
- name: "Linear",
57
- url: "https://mcp.linear.app",
58
- auth: { type: "oauth", scopes: ["read"] },
59
- icon: "/icons/linear.svg",
60
- }),
61
- defineConnector({
62
- id: "weather",
63
- name: "Weather",
64
- url: "https://mcp.example.com/weather",
65
- auth: { type: "none" },
66
- connectionTimeout: 10_000,
67
- }),
68
- ];
69
-
70
- export function Providers({ children }: { children: React.ReactNode }) {
71
- const aui = useAui();
72
- const config = AuiConfig({
73
- mcp: McpManagerResource({
74
- connectors,
75
- connectionTimeout: 15_000,
76
- }),
77
- });
78
- return (
79
- <AuiProvider extends={aui} config={config}>
80
- {children}
81
- </AuiProvider>
82
- );
83
- }
84
- ```
85
-
86
- Defaults and useful options:
87
-
88
- - `storage` — `McpLocalStorage()` (override for production; see [Storage](#storage))
89
- - `oauthRedirectUri` — `${window.location.origin}/mcp/callback`
90
- - `autoConnect` — `true` (connect on mount when usable auth is persisted)
91
- - `connectionTimeout` — optional timeout in milliseconds. Set it on the manager as a default or on a connector/custom server to bound the MCP readiness flow (`connect()` plus `listTools()`) with a clear error.
92
- - Connector `id` values must be unique. The id is used for server lookup, OAuth routing, and model-visible tool names such as `linear__search`.
93
-
94
- </Step>
95
- <Step>
96
-
97
- ### Pick your UI
98
-
99
- You have two options:
100
-
101
- **Drop-in shadcn dialog** (recommended for most apps) — install the `mcp-config` component via the assistant-ui registry, then render `<McpConfigDialog />` anywhere inside the provider. You get a styled trigger, server cards, status badges, error banners, and the add form for free:
102
-
103
- <InstallCommand shadcn={["mcp-config"]} />
104
-
105
- ```tsx title="app/page.tsx"
106
- import { McpConfigDialog } from "@/components/assistant-ui/mcp-config";
107
-
108
- export default function Page() {
109
- return (
110
- <header className="flex items-center justify-between">
111
- <h1>My app</h1>
112
- <McpConfigDialog />
113
- </header>
114
- );
115
- }
116
- ```
117
-
118
- Pass children to override the trigger:
119
-
120
- ```tsx
121
- <McpConfigDialog>
122
- <Button variant="ghost">Servers</Button>
123
- </McpConfigDialog>
124
- ```
125
-
126
- **Compose your own from primitives.** Four namespaces are available, all unstyled and `data-*`-driven. The iteration primitives take a **render function** so the body re-runs per server with the right scope:
127
-
128
- ```tsx title="app/mcp/page.tsx"
129
- "use client";
130
-
131
- import {
132
- McpManagerPrimitive,
133
- McpServerPrimitive,
134
- } from "@assistant-ui/react-mcp";
135
-
136
- const ServerCard = () => (
137
- <McpServerPrimitive.Root>
138
- <McpServerPrimitive.Icon />
139
- <McpServerPrimitive.Name />
140
- <McpServerPrimitive.Status />
141
- <McpServerPrimitive.ConnectButton>Connect</McpServerPrimitive.ConnectButton>
142
- <McpServerPrimitive.DisconnectButton>Disconnect</McpServerPrimitive.DisconnectButton>
143
- <McpServerPrimitive.OAuthLink>Authorize ↗</McpServerPrimitive.OAuthLink>
144
- <McpServerPrimitive.RemoveButton>Remove</McpServerPrimitive.RemoveButton>
145
- <McpServerPrimitive.Error />
146
- </McpServerPrimitive.Root>
147
- );
148
-
149
- export default function McpPage() {
150
- return (
151
- <McpManagerPrimitive.Root>
152
- <h2>Connectors</h2>
153
- <McpManagerPrimitive.Connectors>
154
- {() => <ServerCard />}
155
- </McpManagerPrimitive.Connectors>
156
-
157
- <h2>Your servers</h2>
158
- <McpManagerPrimitive.CustomServers>
159
- {() => <ServerCard />}
160
- </McpManagerPrimitive.CustomServers>
161
-
162
- <McpManagerPrimitive.AddCustomTrigger>
163
- Add custom server
164
- </McpManagerPrimitive.AddCustomTrigger>
165
- </McpManagerPrimitive.Root>
166
- );
167
- }
168
- ```
169
-
170
- To disable custom servers entirely, just don't render `AddCustomTrigger` and `CustomServers`.
171
-
172
- The iteration primitives wrap each item in an `McpServerByIdProvider`, so the nested `<McpServerPrimitive.*>` automatically reads the right scope. `<ConnectButton>`, `<DisconnectButton>`, `<OAuthLink>` and `<RemoveButton>` only render when the relevant state matches — no manual gating. `<RemoveButton>` is also hidden on connector items (which the user can't remove).
173
-
174
- </Step>
175
- <Step>
176
-
177
- ### Add the custom-server form
178
-
179
- ```tsx
180
- <McpAddFormPrimitive.Root onSubmitted={() => closeDialog()}>
181
- <McpAddFormPrimitive.NameField />
182
- <McpAddFormPrimitive.UrlField />
183
- <McpAddFormPrimitive.AuthSelect /> {/* none | bearer | oauth */}
184
- <McpAddFormPrimitive.AuthFields /> {/* token or scope input depending on selection */}
185
- <McpAddFormPrimitive.Error />
186
- <McpAddFormPrimitive.Submit>Add</McpAddFormPrimitive.Submit>
187
- <McpAddFormPrimitive.Cancel>Cancel</McpAddFormPrimitive.Cancel>
188
- </McpAddFormPrimitive.Root>
189
- ```
190
-
191
- The form owns its own draft state and submits via `aui.mcp.addCustomServer(...)`. Pass a render function to `AuthFields` to fully customize it.
192
-
193
- </Step>
194
- <Step>
195
-
196
- ### Handle the OAuth callback
197
-
198
- Add a route at `/mcp/callback` (or whatever you set `oauthRedirectUri` to):
199
-
200
- ```tsx title="app/mcp/callback/page.tsx"
201
- "use client";
202
-
203
- import { McpOAuthCallback } from "@assistant-ui/react-mcp";
204
- import { useRouter } from "next/navigation";
205
- import { Providers } from "../../providers";
206
-
207
- export default function Callback() {
208
- const router = useRouter();
209
- return (
210
- <Providers>
211
- <McpOAuthCallback onComplete={() => router.replace("/mcp")} />
212
- </Providers>
213
- );
214
- }
215
- ```
216
-
217
- The callback reads `?state=...&code=...` from the URL, derives the target server id (encoded in the OAuth `state` parameter automatically), and calls `completeAuth` on the right server.
218
-
219
- </Step>
220
- <Step>
221
-
222
- ### That's it — the chat sees your tools
223
-
224
- `McpManagerResource` registers connected tools as **frontend tools** with the `modelContext` scope. Any chat runtime mounted in the same store (e.g. `@assistant-ui/ai-sdk`'s `useChatRuntime`) sees them and exposes them to the model — no `useMcpTools` hook, no adapter call.
225
-
226
- ```tsx
227
- "use client";
228
- import { lastAssistantMessageIsCompleteWithToolCalls } from "ai";
229
- import { useChatRuntime } from "@assistant-ui/ai-sdk";
230
-
231
- export function Chat() {
232
- const runtime = useChatRuntime({
233
- sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,
234
- });
235
- /* … */
236
- }
237
- ```
238
-
239
- `sendAutomaticallyWhen` sends completed frontend tool results back to the server so the model can continue after a tool call. `useChatRuntime()` targets `/api/chat` by default; to point at a different endpoint, see [Custom transport](/docs/runtimes/ai-sdk/v7#custom-transport).
240
-
241
- Tool names are prefixed `serverId__toolName` to avoid collisions across connected servers. The toolkit re-registers whenever a server connects / disconnects or its tool list changes.
242
-
243
- If no chat runtime is mounted, `McpManagerResource` brings its own minimal `modelContext` along. Tools are still callable directly:
244
-
245
- ```ts
246
- // In an event handler, never in render.
247
- const aui = useAui();
248
- const out = await aui.mcp.server({ id: "linear" }).callTool("search", { q });
249
- ```
250
-
251
- </Step>
252
- </Steps>
253
-
254
- ## Form elicitation
255
-
256
- Connected servers can request structured user input through form-mode elicitation. Render `McpElicitationPrimitive.Items` inside a server-scoped subtree, then compose fields and response actions from the unstyled primitives:
257
-
258
- Answering a request requires composing `McpElicitationPrimitive`, because the server waits for the form response otherwise. Set `elicitation: false` on a connector or custom server to opt it out of advertising the capability. Numeric fields can stay text inputs (parseable strings are coerced); boolean fields must compose a checkbox, because string drafts for booleans are flagged invalid rather than coerced. Clearing a field returns it to the unanswered state, so an empty text input is omitted from the response rather than submitted as `""` or flagged invalid, unless the schema admits `""` for that property through an `enum` member or a `""` default. Render `enum` properties as a select; when `""` is not a member, its blank option is the unanswered state.
259
-
260
- ```tsx
261
- import { McpElicitationPrimitive } from "@assistant-ui/react-mcp";
262
-
263
- <McpElicitationPrimitive.Items>
264
- {() => (
265
- <McpElicitationPrimitive.Root>
266
- <McpElicitationPrimitive.Message />
267
- <McpElicitationPrimitive.Error />
268
- <McpElicitationPrimitive.Fields>
269
- {({ name, schema, value, setValue }) =>
270
- (schema as { type?: string } | undefined)?.type === "boolean" ? (
271
- <label>
272
- {name}
273
- <input
274
- type="checkbox"
275
- checked={value === true}
276
- onChange={(event) => setValue(event.target.checked)}
277
- />
278
- </label>
279
- ) : (
280
- <input
281
- name={name}
282
- value={typeof value === "string" ? value : ""}
283
- onChange={(event) => setValue(event.target.value)}
284
- />
285
- )
286
- }
287
- </McpElicitationPrimitive.Fields>
288
- <McpElicitationPrimitive.Accept>Submit</McpElicitationPrimitive.Accept>
289
- <McpElicitationPrimitive.Decline>Decline</McpElicitationPrimitive.Decline>
290
- <McpElicitationPrimitive.Cancel>Cancel</McpElicitationPrimitive.Cancel>
291
- </McpElicitationPrimitive.Root>
292
- )}
293
- </McpElicitationPrimitive.Items>
294
- ```
295
-
296
- Client-side validation errors keep the elicitation pending so the user can correct the form, and `McpElicitationPrimitive.Error` renders the resulting message.
297
-
298
- ## Storage
299
-
300
- All persisted state — custom server records, OAuth tokens, PKCE verifiers, DCR client info — goes through a single `MCPStorage` resource. Three built-ins:
301
-
302
- - `McpLocalStorage()` — default. Stores under the `aui-mcp:` prefix in `window.localStorage`.
303
- - `McpMemoryStorage()` — in-process Map. Use for SSR/tests where localStorage is absent.
304
- - `McpCustomStorage({...})` — bring your own load/save. Use for app-controlled backends (e.g. POST to your API).
305
-
306
- ```tsx
307
- import { McpManagerResource, McpCustomStorage } from "@assistant-ui/react-mcp";
308
-
309
- AuiConfig({
310
- mcp: McpManagerResource({
311
- connectors,
312
- storage: McpCustomStorage({
313
- loadCustomServers: async () => fetch("/api/mcp/servers").then((r) => r.json()),
314
- saveCustomServers: async (records) =>
315
- fetch("/api/mcp/servers", { method: "PUT", body: JSON.stringify(records) }),
316
- loadAuthState: async (id) =>
317
- fetch(`/api/mcp/auth/${id}`).then((r) => (r.ok ? r.json() : null)),
318
- saveAuthState: async (id, state) =>
319
- fetch(`/api/mcp/auth/${id}`, { method: "PUT", body: JSON.stringify(state) }),
320
- clearAuthState: async (id) =>
321
- fetch(`/api/mcp/auth/${id}`, { method: "DELETE" }),
322
- }),
323
- }),
324
- });
325
- ```
326
-
327
- <Callout type="warn">
328
- `McpLocalStorage` stores tokens in plain text and is XSS-exposed. For anything beyond local prototyping, use `McpCustomStorage` against an HTTP-only-cookie-backed endpoint, or wrap localStorage with your own encrypted serializer.
329
- </Callout>
330
-
331
- ## Auth
332
-
333
- Three modes, declared per-connector or per-custom-record:
334
-
335
- ```ts
336
- { type: "none" } // no auth header
337
- { type: "bearer", token?: "…" } // Authorization: Bearer …
338
- { type: "oauth", // PKCE + DCR + refresh
339
- scopes?: ["read"],
340
- authorizationEndpoint?: "…", // overrides RFC 8414 discovery
341
- tokenEndpoint?: "…",
342
- registrationEndpoint?: "…",
343
- clientId?: "…", // skip DCR with a static client
344
- clientSecret?: "…",
345
- }
346
- ```
347
-
348
- The OAuth provider implements the MCP SDK's `OAuthClientProvider`. The SDK handles discovery (RFC 8414), DCR (RFC 7591 — [deprecated in favor of CIMD](#how-it-works) but still supported), PKCE, token exchange, and refresh; this package mediates `MCPStorage` reads/writes and the redirect step. The server id is embedded in the OAuth `state` parameter so a single `/mcp/callback` route knows which server to complete.
349
-
350
- ## State & methods
351
-
352
- Render-time state — `useAuiState`:
353
-
354
- ```ts
355
- import { useAuiState } from "@assistant-ui/store";
356
-
357
- const isHydrated = useAuiState((s) => s.mcp.isHydrated);
358
- const connectionState = useAuiState((s) => s.mcpServer.connectionState);
359
- // ^ requires McpServerByIdProvider
360
- ```
361
-
362
- Imperative methods: `useAui` + resolve in a callback (never during render):
363
-
364
- ```ts
365
- const aui = useAui();
366
-
367
- // inside an event handler:
368
- await aui.mcp.addCustomServer({ name, url, auth: { type: "bearer", token } });
369
- await aui.mcp.server({ id }).connect();
370
- await aui.mcp.server({ id }).callTool("echo", { text: "hi" });
371
-
372
- // Build a paginated resource browser/preview UI.
373
- type ResourcePage = {
374
- resources: Array<{ uri: string; name?: string }>;
375
- nextCursor?: string;
376
- };
377
-
378
- const server = aui.mcp.server({ id });
379
- const resources: ResourcePage["resources"] = [];
380
- let nextCursor: string | undefined;
381
-
382
- do {
383
- const page = (await (nextCursor === undefined
384
- ? server.listResources()
385
- : server.listResources({ cursor: nextCursor }))) as ResourcePage;
386
- resources.push(...page.resources);
387
- nextCursor = page.nextCursor;
388
- } while (nextCursor !== undefined);
389
-
390
- const firstResource = resources[0];
391
- if (firstResource) {
392
- const preview = await server.readResource(firstResource.uri);
393
- }
394
- ```
395
-
396
- ## v1 scope
397
-
398
- What ships:
399
-
400
- - Tool listing and invocation, auto-registered as frontend tools
401
- - Resource listing and reads for app-built browsers or preview panes
402
- - Form-mode elicitation with app-composed fields and response actions
403
- - OAuth (PKCE + DCR), bearer, none
404
- - StreamableHTTP transport
405
- - Manual connect/disconnect
406
-
407
- What's deferred:
408
-
409
- - Prompts, sampling
410
- - Auto-reconnect with backoff
411
- - Per-tool enable/disable persistence
412
- - Per-tool consent prompts
413
- - Out-of-the-box token encryption (use `McpCustomStorage` against a server endpoint)
414
-
415
- ## Related
416
-
417
- <Cards>
418
- <Card
419
- title="Server-side MCP"
420
- description="App-developer-controlled MCP servers wired into the API route."
421
- href="/docs/tools/mcp"
422
- />
423
- <Card
424
- title="Tools and tool UI"
425
- description="Build custom renderers for tool calls and approvals."
426
- href="/docs/tools/defining-tools"
427
- />
428
- </Cards>
@@ -1,166 +0,0 @@
1
- ---
2
- title: AssistantModal
3
- description: Floating chat bubble for support widgets and help desks.
4
- platforms: ["react"]
5
- ---
6
-
7
- import { AssistantModalSample } from "@/components/pages/docs/samples/assistant-modal";
8
- import * as AssistantModalRadixSamples from "@/components/pages/docs/samples/assistant-modal.radix";
9
- import { Flavored, FlavorSwitcher } from "@/components/pages/docs/contexts/flavor.server";
10
-
11
- A floating chat modal built on the popover primitive of your configured style (Radix UI Popover on Radix styles, Base UI Popover on `base-*` styles). Ideal for support widgets, help desks, and embedded assistants.
12
-
13
- <FlavorSwitcher />
14
-
15
- <Flavored radix={<AssistantModalRadixSamples.AssistantModalSample />} base={<AssistantModalSample />} />
16
-
17
- ## Getting Started
18
-
19
- <Steps>
20
- <Step>
21
-
22
- ### Add `assistant-modal`
23
-
24
- <InstallCommand shadcn={["assistant-modal"]} />
25
-
26
- This adds `/components/assistant-ui/assistant-modal.tsx` to your project, which you can adjust as needed.
27
-
28
- </Step>
29
- <Step>
30
-
31
- ### Use in your application
32
-
33
- ```tsx title="/app/page.tsx" {1,6}
34
- import { AssistantModal } from "@/components/assistant-ui/assistant-modal";
35
-
36
- export default function Home() {
37
- return (
38
- <div className="h-full">
39
- <AssistantModal />
40
- </div>
41
- );
42
- }
43
- ```
44
-
45
- </Step>
46
- </Steps>
47
-
48
- ## Anatomy
49
-
50
- The Radix flavor of `AssistantModal` is built with the following primitives. The Base UI flavor composes your project's Base UI Popover instead.
51
-
52
- ```tsx
53
- import { AssistantModalPrimitive } from "@assistant-ui/react";
54
-
55
- <AssistantModalPrimitive.Root>
56
- <AssistantModalPrimitive.Anchor />
57
- <AssistantModalPrimitive.Trigger />
58
- <AssistantModalPrimitive.Content>
59
- {/* Thread component goes here */}
60
- </AssistantModalPrimitive.Content>
61
- </AssistantModalPrimitive.Root>
62
- ```
63
-
64
- ## API Reference
65
-
66
- ### Root
67
-
68
- Contains all parts of the modal when using `AssistantModalPrimitive` (the Radix flavor). The Base UI flavor uses your project's Base UI Popover instead.
69
-
70
- <ParametersTable
71
- type="AssistantModalPrimitiveRootProps"
72
- parameters={[
73
- {
74
- name: "defaultOpen",
75
- type: "boolean",
76
- description: "The initial open state when uncontrolled.",
77
- },
78
- {
79
- name: "open",
80
- type: "boolean",
81
- description: "The controlled open state.",
82
- },
83
- {
84
- name: "onOpenChange",
85
- type: "(open: boolean) => void",
86
- description: "Callback when the open state changes.",
87
- },
88
- {
89
- name: "unstable_openOnRunStart",
90
- type: "boolean",
91
- description: "Automatically open the modal when the assistant starts running.",
92
- },
93
- ]}
94
- />
95
-
96
- ### Trigger
97
-
98
- A button that toggles the modal open/closed state.
99
-
100
- <ParametersTable
101
- type="AssistantModalPrimitiveTriggerProps"
102
- parameters={[
103
- {
104
- name: "asChild",
105
- type: "boolean",
106
- default: "false",
107
- description: "Merge props with child element instead of rendering a wrapper button.",
108
- },
109
- ]}
110
- />
111
-
112
- This primitive renders a `<button>` element unless `asChild` is set.
113
-
114
- ### Content
115
-
116
- The popover content container that holds the chat interface.
117
-
118
- <ParametersTable
119
- type="AssistantModalPrimitiveContentProps"
120
- parameters={[
121
- {
122
- name: "side",
123
- type: "'top' | 'right' | 'bottom' | 'left'",
124
- default: "'top'",
125
- description: "The preferred side of the anchor to render against.",
126
- },
127
- {
128
- name: "align",
129
- type: "'start' | 'center' | 'end'",
130
- default: "'end'",
131
- description: "The preferred alignment against the anchor.",
132
- },
133
- {
134
- name: "dissmissOnInteractOutside",
135
- type: "boolean",
136
- description: "Whether to close the modal when clicking outside.",
137
- },
138
- {
139
- name: "asChild",
140
- type: "boolean",
141
- default: "false",
142
- description: "Merge props with child element instead of rendering a wrapper div.",
143
- },
144
- ]}
145
- />
146
-
147
- ### Anchor
148
-
149
- An optional anchor element to position the modal relative to.
150
-
151
- <ParametersTable
152
- type="AssistantModalPrimitiveAnchorProps"
153
- parameters={[
154
- {
155
- name: "asChild",
156
- type: "boolean",
157
- default: "false",
158
- description: "Merge props with child element instead of rendering a wrapper div.",
159
- },
160
- ]}
161
- />
162
-
163
- ## Related Components
164
-
165
- - [Thread](/docs/ui/thread) - The main chat interface used inside the modal
166
- - [AssistantSidebar](/docs/ui/assistant-sidebar) - Alternative layout for side panel chat
@@ -1,89 +0,0 @@
1
- ---
2
- title: AssistantSidebar
3
- description: Side panel chat for co-pilot experiences and inline assistance.
4
- platforms: ["react"]
5
- ---
6
-
7
- import { AssistantSidebarSample } from "@/components/pages/docs/samples/assistant-sidebar";
8
-
9
- A resizable side panel layout with your main content on the left and a Thread chat interface on the right. Ideal for co-pilot experiences and inline assistance.
10
-
11
- <AssistantSidebarSample />
12
-
13
- ## Getting Started
14
-
15
- <Steps>
16
- <Step>
17
-
18
- ### Add `assistant-sidebar`
19
-
20
- <InstallCommand shadcn={["assistant-sidebar"]} />
21
-
22
- This adds `/components/assistant-ui/assistant-sidebar.tsx` to your project, which you can adjust as needed.
23
-
24
- </Step>
25
- <Step>
26
-
27
- ### Use in your application
28
-
29
- ```tsx title="/app/page.tsx" {1,6}
30
- import { AssistantSidebar } from "@/components/assistant-ui/assistant-sidebar";
31
-
32
- export default function Home() {
33
- return (
34
- <div className="h-full">
35
- <AssistantSidebar>{/* your app */}</AssistantSidebar>
36
- </div>
37
- );
38
- }
39
- ```
40
-
41
- </Step>
42
- </Steps>
43
-
44
- ## API Reference
45
-
46
- ### AssistantSidebar
47
-
48
- A layout component that creates a resizable two-panel interface.
49
-
50
- <ParametersTable
51
- type="AssistantSidebarProps"
52
- parameters={[
53
- {
54
- name: "children",
55
- type: "ReactNode",
56
- description: "Content to display in the left panel (your main application).",
57
- },
58
- ]}
59
- />
60
-
61
- The component uses `ResizablePanelGroup` from shadcn/ui internally, creating:
62
- - **Left panel**: Your application content (passed as `children`)
63
- - **Right panel**: The Thread chat interface (rendered automatically)
64
- - **Resize handle**: Draggable divider between panels
65
-
66
- ## Customization
67
-
68
- Since this component is copied to your project at `/components/assistant-ui/assistant-sidebar.tsx`, you can customize:
69
-
70
- - Panel default sizes and min/max constraints
71
- - Resize handle styling
72
- - Thread component configuration
73
-
74
- ```tsx title="/components/assistant-ui/assistant-sidebar.tsx"
75
- <ResizablePanelGroup direction="horizontal">
76
- <ResizablePanel defaultSize={60} minSize={30}>
77
- {children}
78
- </ResizablePanel>
79
- <ResizableHandle withHandle />
80
- <ResizablePanel defaultSize={40} minSize={20}>
81
- <Thread />
82
- </ResizablePanel>
83
- </ResizablePanelGroup>
84
- ```
85
-
86
- ## Related Components
87
-
88
- - [Thread](/docs/ui/thread) - The chat interface displayed in the sidebar
89
- - [AssistantModal](/docs/ui/assistant-modal) - Alternative floating modal layout