@assistant-ui/mcp-docs-server 0.2.2 → 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.
- package/README.md +16 -43
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -91
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +9 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +76 -0
- package/dist/proxy.js.map +1 -0
- package/package.json +9 -13
- package/src/index.ts +3 -115
- package/src/proxy.test.ts +250 -0
- package/src/proxy.ts +111 -0
- package/.docs/organized/code-examples/waterfall.md +0 -807
- package/.docs/organized/code-examples/with-a2a.md +0 -674
- package/.docs/organized/code-examples/with-ag-ui.md +0 -552
- package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -465
- package/.docs/organized/code-examples/with-artifacts.md +0 -814
- package/.docs/organized/code-examples/with-assistant-transport.md +0 -575
- package/.docs/organized/code-examples/with-browser-extension.md +0 -371
- package/.docs/organized/code-examples/with-chain-of-thought.md +0 -960
- package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
- package/.docs/organized/code-examples/with-cloud.md +0 -438
- package/.docs/organized/code-examples/with-custom-thread-list.md +0 -568
- package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -526
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -696
- package/.docs/organized/code-examples/with-eve.md +0 -404
- package/.docs/organized/code-examples/with-expo.md +0 -2063
- package/.docs/organized/code-examples/with-external-store.md +0 -420
- package/.docs/organized/code-examples/with-ffmpeg.md +0 -828
- package/.docs/organized/code-examples/with-generative-ui.md +0 -1812
- package/.docs/organized/code-examples/with-google-adk.md +0 -367
- package/.docs/organized/code-examples/with-heat-graph.md +0 -304
- package/.docs/organized/code-examples/with-image-generation.md +0 -462
- package/.docs/organized/code-examples/with-interactables.md +0 -732
- package/.docs/organized/code-examples/with-langchain.md +0 -445
- package/.docs/organized/code-examples/with-langgraph.md +0 -854
- package/.docs/organized/code-examples/with-livekit.md +0 -642
- package/.docs/organized/code-examples/with-mcp.md +0 -780
- package/.docs/organized/code-examples/with-nuxt.md +0 -2428
- package/.docs/organized/code-examples/with-opencode.md +0 -1974
- package/.docs/organized/code-examples/with-openui.md +0 -449
- package/.docs/organized/code-examples/with-pi.md +0 -2083
- package/.docs/organized/code-examples/with-react-hook-form.md +0 -724
- package/.docs/organized/code-examples/with-react-ink-web.md +0 -690
- package/.docs/organized/code-examples/with-react-ink.md +0 -472
- package/.docs/organized/code-examples/with-react-router.md +0 -935
- package/.docs/organized/code-examples/with-resumable-stream.md +0 -667
- package/.docs/organized/code-examples/with-store.md +0 -679
- package/.docs/organized/code-examples/with-svelte.md +0 -415
- package/.docs/organized/code-examples/with-sveltekit.md +0 -1061
- package/.docs/organized/code-examples/with-tanstack.md +0 -811
- package/.docs/organized/code-examples/with-tap-runtime.md +0 -812
- package/.docs/organized/code-examples/with-virtualized-thread.md +0 -680
- package/.docs/organized/code-examples/with-vue.md +0 -408
- package/.docs/raw/docs/(docs)/architecture.mdx +0 -146
- package/.docs/raw/docs/(docs)/base-ui.mdx +0 -39
- package/.docs/raw/docs/(docs)/cli.mdx +0 -542
- package/.docs/raw/docs/(docs)/devtools.mdx +0 -79
- package/.docs/raw/docs/(docs)/index.mdx +0 -21
- package/.docs/raw/docs/(docs)/installation.mdx +0 -483
- package/.docs/raw/docs/(docs)/llm.mdx +0 -211
- package/.docs/raw/docs/(docs)/rtl.mdx +0 -78
- package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +0 -36
- package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +0 -34
- package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +0 -44
- package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +0 -59
- package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +0 -84
- package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +0 -64
- package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +0 -52
- package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +0 -49
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +0 -40
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +0 -56
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +0 -86
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +0 -39
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +0 -42
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +0 -84
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +0 -85
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +0 -45
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +0 -93
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +0 -129
- package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +0 -31
- package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +0 -34
- package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +0 -350
- package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +0 -28
- package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +0 -97
- package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -97
- package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +0 -200
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -37
- package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +0 -50
- package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +0 -566
- package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +0 -152
- package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +0 -239
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +0 -208
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +0 -108
- package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +0 -99
- package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +0 -145
- package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +0 -82
- package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +0 -619
- package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +0 -65
- package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +0 -73
- package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +0 -117
- package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +0 -339
- package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +0 -77
- package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +0 -88
- package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +0 -81
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +0 -129
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +0 -138
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +0 -122
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +0 -289
- package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +0 -32
- package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +0 -43
- package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +0 -43
- package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +0 -36
- package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +0 -85
- package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +0 -45
- package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +0 -55
- package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +0 -151
- package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +0 -106
- package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +0 -178
- package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +0 -48
- package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +0 -19
- package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +0 -149
- package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +0 -54
- package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +0 -36
- package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +0 -527
- package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -602
- package/.docs/raw/docs/cloud/authorization.mdx +0 -252
- package/.docs/raw/docs/cloud/index.mdx +0 -46
- package/.docs/raw/docs/cloud/langgraph.mdx +0 -554
- package/.docs/raw/docs/copilots/assistant-frame.mdx +0 -400
- package/.docs/raw/docs/copilots/make-assistant-visible.mdx +0 -82
- package/.docs/raw/docs/copilots/model-context.mdx +0 -156
- package/.docs/raw/docs/copilots/motivation.mdx +0 -202
- package/.docs/raw/docs/copilots/use-assistant-instructions.mdx +0 -64
- package/.docs/raw/docs/guides/attachments.mdx +0 -619
- package/.docs/raw/docs/guides/branching.mdx +0 -76
- package/.docs/raw/docs/guides/chain-of-thought.mdx +0 -164
- package/.docs/raw/docs/guides/chatgpt-subscription.mdx +0 -108
- package/.docs/raw/docs/guides/context-api.mdx +0 -619
- package/.docs/raw/docs/guides/dictation.mdx +0 -298
- package/.docs/raw/docs/guides/editing.mdx +0 -102
- package/.docs/raw/docs/guides/electron.mdx +0 -369
- package/.docs/raw/docs/guides/headless-composer-input.mdx +0 -113
- package/.docs/raw/docs/guides/image-generation.mdx +0 -74
- package/.docs/raw/docs/guides/index.mdx +0 -117
- package/.docs/raw/docs/guides/input-history.mdx +0 -55
- package/.docs/raw/docs/guides/latex.mdx +0 -158
- package/.docs/raw/docs/guides/mentions.mdx +0 -575
- package/.docs/raw/docs/guides/message-timing.mdx +0 -209
- package/.docs/raw/docs/guides/quoting.mdx +0 -169
- package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +0 -212
- package/.docs/raw/docs/guides/resumable-stream-stores.mdx +0 -152
- package/.docs/raw/docs/guides/resumable-streams.mdx +0 -292
- package/.docs/raw/docs/guides/slash-commands.mdx +0 -358
- package/.docs/raw/docs/guides/speech.mdx +0 -172
- package/.docs/raw/docs/guides/suggestions.mdx +0 -384
- package/.docs/raw/docs/guides/virtualization.mdx +0 -133
- package/.docs/raw/docs/guides/voice.mdx +0 -310
- package/.docs/raw/docs/ink/adapters.mdx +0 -99
- package/.docs/raw/docs/ink/custom-backend.mdx +0 -254
- package/.docs/raw/docs/ink/hooks.mdx +0 -469
- package/.docs/raw/docs/ink/index.mdx +0 -236
- package/.docs/raw/docs/ink/migration.mdx +0 -138
- package/.docs/raw/docs/ink/primitives.mdx +0 -1259
- package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +0 -528
- package/.docs/raw/docs/integrations/auth/better-auth.mdx +0 -188
- package/.docs/raw/docs/integrations/auth/clerk.mdx +0 -166
- package/.docs/raw/docs/integrations/auth/next-auth.mdx +0 -191
- package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +0 -88
- package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +0 -282
- package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +0 -188
- package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +0 -57
- package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +0 -201
- package/.docs/raw/docs/integrations/gateways/index.mdx +0 -162
- package/.docs/raw/docs/integrations/index.mdx +0 -178
- package/.docs/raw/docs/integrations/observability/helicone.mdx +0 -129
- package/.docs/raw/docs/integrations/observability/langfuse.mdx +0 -161
- package/.docs/raw/docs/integrations/observability/langsmith.mdx +0 -151
- package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +0 -773
- package/.docs/raw/docs/migrations/deprecation-policy.mdx +0 -42
- package/.docs/raw/docs/migrations/index.mdx +0 -50
- package/.docs/raw/docs/migrations/react-compatibility.mdx +0 -74
- package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +0 -328
- package/.docs/raw/docs/migrations/toolkit-tools.mdx +0 -236
- package/.docs/raw/docs/migrations/v0-11.mdx +0 -172
- package/.docs/raw/docs/migrations/v0-12.mdx +0 -302
- package/.docs/raw/docs/migrations/v0-14.mdx +0 -297
- package/.docs/raw/docs/migrations/v0-15.mdx +0 -270
- package/.docs/raw/docs/primitives/action-bar.mdx +0 -352
- package/.docs/raw/docs/primitives/assistant-modal.mdx +0 -216
- package/.docs/raw/docs/primitives/attachment.mdx +0 -217
- package/.docs/raw/docs/primitives/branch-picker.mdx +0 -222
- package/.docs/raw/docs/primitives/chain-of-thought.mdx +0 -315
- package/.docs/raw/docs/primitives/composer.mdx +0 -659
- package/.docs/raw/docs/primitives/error.mdx +0 -142
- package/.docs/raw/docs/primitives/index.mdx +0 -99
- package/.docs/raw/docs/primitives/message.mdx +0 -618
- package/.docs/raw/docs/primitives/selection-toolbar.mdx +0 -191
- package/.docs/raw/docs/primitives/suggestion.mdx +0 -254
- package/.docs/raw/docs/primitives/thread-list.mdx +0 -467
- package/.docs/raw/docs/primitives/thread.mdx +0 -509
- package/.docs/raw/docs/react-native/adapters.mdx +0 -94
- package/.docs/raw/docs/react-native/custom-backend.mdx +0 -207
- package/.docs/raw/docs/react-native/hooks.mdx +0 -339
- package/.docs/raw/docs/react-native/index.mdx +0 -289
- package/.docs/raw/docs/react-native/migration.mdx +0 -142
- package/.docs/raw/docs/react-native/primitives.mdx +0 -839
- package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +0 -399
- package/.docs/raw/docs/runtimes/a2a/overview.mdx +0 -60
- package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +0 -216
- package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +0 -124
- package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +0 -70
- package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +0 -243
- package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +0 -255
- package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +0 -61
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +0 -122
- package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +0 -135
- package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +0 -636
- package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +0 -716
- package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +0 -118
- package/.docs/raw/docs/runtimes/concepts/adapters.mdx +0 -265
- package/.docs/raw/docs/runtimes/concepts/architecture.mdx +0 -167
- package/.docs/raw/docs/runtimes/concepts/stability.mdx +0 -68
- package/.docs/raw/docs/runtimes/concepts/threads.mdx +0 -513
- package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +0 -763
- package/.docs/raw/docs/runtimes/custom/data-stream.mdx +0 -339
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +0 -957
- package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +0 -902
- package/.docs/raw/docs/runtimes/custom/overview.mdx +0 -71
- package/.docs/raw/docs/runtimes/eve/overview.mdx +0 -151
- package/.docs/raw/docs/runtimes/eve/quickstart.mdx +0 -192
- package/.docs/raw/docs/runtimes/google-adk/api.mdx +0 -256
- package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +0 -784
- package/.docs/raw/docs/runtimes/google-adk/overview.mdx +0 -69
- package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +0 -229
- package/.docs/raw/docs/runtimes/langchain.mdx +0 -901
- package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +0 -181
- package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +0 -305
- package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +0 -104
- package/.docs/raw/docs/runtimes/langgraph/overview.mdx +0 -84
- package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +0 -496
- package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +0 -144
- package/.docs/raw/docs/runtimes/langgraph/threads.mdx +0 -113
- package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +0 -29
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -93
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +0 -347
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +0 -393
- package/.docs/raw/docs/runtimes/opencode/hooks.mdx +0 -194
- package/.docs/raw/docs/runtimes/opencode/overview.mdx +0 -58
- package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +0 -119
- package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +0 -133
- package/.docs/raw/docs/tools/a2ui.mdx +0 -107
- package/.docs/raw/docs/tools/backend.mdx +0 -147
- package/.docs/raw/docs/tools/defining-tools.mdx +0 -574
- package/.docs/raw/docs/tools/dynamic-tools.mdx +0 -112
- package/.docs/raw/docs/tools/generative-ui-primitive.mdx +0 -180
- package/.docs/raw/docs/tools/generative-ui-slack.mdx +0 -167
- package/.docs/raw/docs/tools/generative-ui-teams.mdx +0 -160
- package/.docs/raw/docs/tools/generative-ui.mdx +0 -322
- package/.docs/raw/docs/tools/index.mdx +0 -72
- package/.docs/raw/docs/tools/interactables.mdx +0 -1084
- package/.docs/raw/docs/tools/mcp-apps.mdx +0 -346
- package/.docs/raw/docs/tools/mcp.mdx +0 -466
- package/.docs/raw/docs/tools/multi-agent.mdx +0 -237
- package/.docs/raw/docs/tools/openui.mdx +0 -175
- package/.docs/raw/docs/tools/tool-ui.mdx +0 -1008
- package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
- package/.docs/raw/docs/ui/accordion.mdx +0 -266
- package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
- package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
- package/.docs/raw/docs/ui/attachment.mdx +0 -259
- package/.docs/raw/docs/ui/badge.mdx +0 -150
- package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -212
- package/.docs/raw/docs/ui/context-display.mdx +0 -148
- package/.docs/raw/docs/ui/diff-viewer.mdx +0 -280
- package/.docs/raw/docs/ui/directive-text.mdx +0 -114
- package/.docs/raw/docs/ui/dot-matrix.mdx +0 -133
- package/.docs/raw/docs/ui/file.mdx +0 -159
- package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
- package/.docs/raw/docs/ui/image.mdx +0 -102
- package/.docs/raw/docs/ui/markdown.mdx +0 -64
- package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
- package/.docs/raw/docs/ui/mermaid.mdx +0 -92
- package/.docs/raw/docs/ui/message-timing.mdx +0 -93
- package/.docs/raw/docs/ui/model-selector.mdx +0 -455
- package/.docs/raw/docs/ui/number-roll.mdx +0 -154
- package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
- package/.docs/raw/docs/ui/quote.mdx +0 -211
- package/.docs/raw/docs/ui/reasoning.mdx +0 -186
- package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
- package/.docs/raw/docs/ui/select.mdx +0 -254
- package/.docs/raw/docs/ui/sources.mdx +0 -177
- package/.docs/raw/docs/ui/streamdown.mdx +0 -392
- package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
- package/.docs/raw/docs/ui/tabs.mdx +0 -271
- package/.docs/raw/docs/ui/thread-list.mdx +0 -372
- package/.docs/raw/docs/ui/thread.mdx +0 -512
- package/.docs/raw/docs/ui/tool-fallback.mdx +0 -127
- package/.docs/raw/docs/ui/tool-group.mdx +0 -240
- package/.docs/raw/docs/ui/voice.mdx +0 -173
- package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
- package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
- package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
- package/dist/constants.d.ts +0 -14
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -19
- package/dist/constants.js.map +0 -1
- package/dist/prepare-docs/code-examples.d.ts +0 -5
- package/dist/prepare-docs/code-examples.d.ts.map +0 -1
- package/dist/prepare-docs/code-examples.js +0 -117
- package/dist/prepare-docs/code-examples.js.map +0 -1
- package/dist/prepare-docs/copy-raw.d.ts +0 -5
- package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
- package/dist/prepare-docs/copy-raw.js +0 -49
- package/dist/prepare-docs/copy-raw.js.map +0 -1
- package/dist/prepare-docs/prepare.d.ts +0 -1
- package/dist/prepare-docs/prepare.js +0 -22
- package/dist/prepare-docs/prepare.js.map +0 -1
- package/dist/prompts/xulux-playground.d.ts +0 -12
- package/dist/prompts/xulux-playground.d.ts.map +0 -1
- package/dist/prompts/xulux-playground.js +0 -33
- package/dist/prompts/xulux-playground.js.map +0 -1
- package/dist/tools/docs.d.ts +0 -22
- package/dist/tools/docs.d.ts.map +0 -1
- package/dist/tools/docs.js +0 -177
- package/dist/tools/docs.js.map +0 -1
- package/dist/tools/examples.d.ts +0 -24
- package/dist/tools/examples.d.ts.map +0 -1
- package/dist/tools/examples.js +0 -87
- package/dist/tools/examples.js.map +0 -1
- package/dist/tools/resources.d.ts +0 -6
- package/dist/tools/resources.d.ts.map +0 -1
- package/dist/tools/resources.js +0 -75
- package/dist/tools/resources.js.map +0 -1
- package/dist/tools/search.d.ts +0 -24
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js +0 -39
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/tests/mcp-test-client.d.ts +0 -15
- package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
- package/dist/tools/tests/mcp-test-client.js +0 -68
- package/dist/tools/tests/mcp-test-client.js.map +0 -1
- package/dist/tools/tests/test-setup.d.ts +0 -7
- package/dist/tools/tests/test-setup.d.ts.map +0 -1
- package/dist/tools/tests/test-setup.js +0 -36
- package/dist/tools/tests/test-setup.js.map +0 -1
- package/dist/tools/xulux-templates.d.ts +0 -58
- package/dist/tools/xulux-templates.d.ts.map +0 -1
- package/dist/tools/xulux-templates.js +0 -84
- package/dist/tools/xulux-templates.js.map +0 -1
- package/dist/utils/cache.d.ts +0 -5
- package/dist/utils/cache.d.ts.map +0 -1
- package/dist/utils/cache.js +0 -18
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -10
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -20
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/mcp-format.d.ts +0 -11
- package/dist/utils/mcp-format.d.ts.map +0 -1
- package/dist/utils/mcp-format.js +0 -14
- package/dist/utils/mcp-format.js.map +0 -1
- package/dist/utils/mdx.d.ts +0 -12
- package/dist/utils/mdx.d.ts.map +0 -1
- package/dist/utils/mdx.js +0 -45
- package/dist/utils/mdx.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -12
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js +0 -93
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/search.d.ts +0 -10
- package/dist/utils/search.d.ts.map +0 -1
- package/dist/utils/search.js +0 -97
- package/dist/utils/search.js.map +0 -1
- package/dist/utils/security.d.ts +0 -5
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/utils/security.js +0 -22
- package/dist/utils/security.js.map +0 -1
- package/dist/xulux/catalog-client.d.ts +0 -14
- package/dist/xulux/catalog-client.d.ts.map +0 -1
- package/dist/xulux/catalog-client.js +0 -67
- package/dist/xulux/catalog-client.js.map +0 -1
- package/dist/xulux/fallback-catalog.d.ts +0 -7
- package/dist/xulux/fallback-catalog.d.ts.map +0 -1
- package/dist/xulux/fallback-catalog.js +0 -47
- package/dist/xulux/fallback-catalog.js.map +0 -1
- package/dist/xulux/fetch-sandbox.d.ts +0 -5
- package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
- package/dist/xulux/fetch-sandbox.js +0 -40
- package/dist/xulux/fetch-sandbox.js.map +0 -1
- package/dist/xulux/template-service.d.ts +0 -84
- package/dist/xulux/template-service.d.ts.map +0 -1
- package/dist/xulux/template-service.js +0 -223
- package/dist/xulux/template-service.js.map +0 -1
- package/dist/xulux/types.d.ts +0 -55
- package/dist/xulux/types.d.ts.map +0 -1
- package/dist/xulux/types.js +0 -6
- package/dist/xulux/types.js.map +0 -1
- package/src/constants.ts +0 -24
- package/src/prepare-docs/code-examples.ts +0 -158
- package/src/prepare-docs/copy-raw.ts +0 -50
- package/src/prepare-docs/prepare.ts +0 -24
- package/src/prompts/xulux-playground.ts +0 -36
- package/src/tools/docs.ts +0 -255
- package/src/tools/examples.ts +0 -114
- package/src/tools/resources.ts +0 -111
- package/src/tools/search.ts +0 -46
- package/src/tools/tests/completions.test.ts +0 -60
- package/src/tools/tests/directory-size-cap.test.ts +0 -50
- package/src/tools/tests/docs.test.ts +0 -144
- package/src/tools/tests/examples.test.ts +0 -94
- package/src/tools/tests/integration.test.ts +0 -45
- package/src/tools/tests/json-parsing.test.ts +0 -23
- package/src/tools/tests/listings-cache.test.ts +0 -19
- package/src/tools/tests/mcp-protocol.test.ts +0 -216
- package/src/tools/tests/mcp-test-client.ts +0 -111
- package/src/tools/tests/path-traversal.test.ts +0 -81
- package/src/tools/tests/resources.test.ts +0 -133
- package/src/tools/tests/search.test.ts +0 -37
- package/src/tools/tests/test-setup.ts +0 -50
- package/src/tools/tests/xulux-templates.test.ts +0 -262
- package/src/tools/xulux-templates.ts +0 -141
- package/src/utils/cache.ts +0 -20
- package/src/utils/logger.ts +0 -20
- package/src/utils/mcp-format.ts +0 -14
- package/src/utils/mdx.ts +0 -59
- package/src/utils/paths.ts +0 -139
- package/src/utils/search.ts +0 -131
- package/src/utils/security.ts +0 -52
- package/src/utils/tests/cache.test.ts +0 -51
- package/src/utils/tests/mcp-format.test.ts +0 -22
- package/src/utils/tests/security.test.ts +0 -119
- package/src/xulux/catalog-client.ts +0 -105
- package/src/xulux/fallback-catalog.ts +0 -63
- package/src/xulux/fetch-sandbox.ts +0 -56
- package/src/xulux/template-service.ts +0 -406
- package/src/xulux/types.ts +0 -60
|
@@ -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/react-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/react-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,266 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Accordion
|
|
3
|
-
description: A vertically stacked set of interactive headings that reveal or hide content sections.
|
|
4
|
-
links:
|
|
5
|
-
- label: Radix UI Accordion (Radix styles)
|
|
6
|
-
url: https://www.radix-ui.com/primitives/docs/components/accordion
|
|
7
|
-
- label: Base UI Accordion (base styles)
|
|
8
|
-
url: https://base-ui.com/react/components/accordion
|
|
9
|
-
platforms: ["react"]
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
import { PreviewCode } from "@/components/docs/preview-code.server";
|
|
13
|
-
import {
|
|
14
|
-
AccordionSample,
|
|
15
|
-
AccordionVariantsSample,
|
|
16
|
-
AccordionMultipleSample,
|
|
17
|
-
AccordionWithIconsSample,
|
|
18
|
-
AccordionControlledSample,
|
|
19
|
-
AccordionFAQSample,
|
|
20
|
-
} from "@/components/docs/samples/accordion";
|
|
21
|
-
import * as AccordionRadixSamples from "@/components/docs/samples/accordion.radix";
|
|
22
|
-
import { Flavored, FlavorSwitcher } from "@/components/docs/contexts/flavor.server";
|
|
23
|
-
|
|
24
|
-
<Callout>
|
|
25
|
-
This is a **standalone component** that does not depend on the assistant-ui runtime. Use it anywhere in your application.
|
|
26
|
-
</Callout>
|
|
27
|
-
|
|
28
|
-
<FlavorSwitcher />
|
|
29
|
-
|
|
30
|
-
<Flavored radix={<AccordionRadixSamples.AccordionSample />} base={<AccordionSample />} />
|
|
31
|
-
|
|
32
|
-
## Installation
|
|
33
|
-
|
|
34
|
-
<InstallCommand shadcn={["accordion"]} />
|
|
35
|
-
|
|
36
|
-
## Usage
|
|
37
|
-
|
|
38
|
-
```tsx
|
|
39
|
-
import {
|
|
40
|
-
Accordion,
|
|
41
|
-
AccordionItem,
|
|
42
|
-
AccordionTrigger,
|
|
43
|
-
AccordionContent,
|
|
44
|
-
} from "@/components/assistant-ui/accordion";
|
|
45
|
-
|
|
46
|
-
export function Example() {
|
|
47
|
-
return (
|
|
48
|
-
<Accordion type="single" collapsible>
|
|
49
|
-
<AccordionItem value="item-1">
|
|
50
|
-
<AccordionTrigger>Section 1</AccordionTrigger>
|
|
51
|
-
<AccordionContent>Content for section 1.</AccordionContent>
|
|
52
|
-
</AccordionItem>
|
|
53
|
-
<AccordionItem value="item-2">
|
|
54
|
-
<AccordionTrigger>Section 2</AccordionTrigger>
|
|
55
|
-
<AccordionContent>Content for section 2.</AccordionContent>
|
|
56
|
-
</AccordionItem>
|
|
57
|
-
</Accordion>
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Examples
|
|
63
|
-
|
|
64
|
-
### Variants
|
|
65
|
-
|
|
66
|
-
Use the `variant` prop on `Accordion` to change the visual style. Child components inherit the variant automatically.
|
|
67
|
-
|
|
68
|
-
<Flavored radix={<AccordionRadixSamples.AccordionVariantsSample />} base={<AccordionVariantsSample />} />
|
|
69
|
-
|
|
70
|
-
```tsx
|
|
71
|
-
// Default - border-bottom separator
|
|
72
|
-
<Accordion type="single" collapsible variant="default">
|
|
73
|
-
<AccordionItem value="item-1">
|
|
74
|
-
<AccordionTrigger>...</AccordionTrigger>
|
|
75
|
-
<AccordionContent>...</AccordionContent>
|
|
76
|
-
</AccordionItem>
|
|
77
|
-
</Accordion>
|
|
78
|
-
|
|
79
|
-
// Outline - bordered container
|
|
80
|
-
<Accordion type="single" collapsible variant="outline">
|
|
81
|
-
<AccordionItem value="item-1">
|
|
82
|
-
<AccordionTrigger>...</AccordionTrigger>
|
|
83
|
-
<AccordionContent>...</AccordionContent>
|
|
84
|
-
</AccordionItem>
|
|
85
|
-
</Accordion>
|
|
86
|
-
|
|
87
|
-
// Ghost - separated cards
|
|
88
|
-
<Accordion type="single" collapsible variant="ghost">
|
|
89
|
-
<AccordionItem value="item-1">
|
|
90
|
-
<AccordionTrigger>...</AccordionTrigger>
|
|
91
|
-
<AccordionContent>...</AccordionContent>
|
|
92
|
-
</AccordionItem>
|
|
93
|
-
</Accordion>
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### Multiple Items Open
|
|
97
|
-
|
|
98
|
-
Use `type="multiple"` to allow multiple items to be open simultaneously.
|
|
99
|
-
|
|
100
|
-
<Flavored radix={<AccordionRadixSamples.AccordionMultipleSample />} base={<AccordionMultipleSample />} />
|
|
101
|
-
|
|
102
|
-
```tsx
|
|
103
|
-
<Accordion type="multiple">
|
|
104
|
-
<AccordionItem value="item-1">
|
|
105
|
-
<AccordionTrigger>First Section</AccordionTrigger>
|
|
106
|
-
<AccordionContent>Content 1</AccordionContent>
|
|
107
|
-
</AccordionItem>
|
|
108
|
-
<AccordionItem value="item-2">
|
|
109
|
-
<AccordionTrigger>Second Section</AccordionTrigger>
|
|
110
|
-
<AccordionContent>Content 2</AccordionContent>
|
|
111
|
-
</AccordionItem>
|
|
112
|
-
</Accordion>
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### With Icons
|
|
116
|
-
|
|
117
|
-
Add icons or custom elements inside the trigger.
|
|
118
|
-
|
|
119
|
-
<PreviewCode file="components/docs/samples/accordion" name="AccordionWithIconsSample" base={<AccordionWithIconsSample />}>
|
|
120
|
-
<AccordionRadixSamples.AccordionWithIconsSample />
|
|
121
|
-
</PreviewCode>
|
|
122
|
-
|
|
123
|
-
### Controlled
|
|
124
|
-
|
|
125
|
-
Use `value` and `onValueChange` for controlled accordion state.
|
|
126
|
-
|
|
127
|
-
<PreviewCode file="components/docs/samples/accordion" name="AccordionControlledSample" base={<AccordionControlledSample />}>
|
|
128
|
-
<AccordionRadixSamples.AccordionControlledSample />
|
|
129
|
-
</PreviewCode>
|
|
130
|
-
|
|
131
|
-
### FAQ Section
|
|
132
|
-
|
|
133
|
-
A practical example of using accordion for a FAQ section.
|
|
134
|
-
|
|
135
|
-
<PreviewCode file="components/docs/samples/accordion" name="AccordionFAQSample" base={<AccordionFAQSample />}>
|
|
136
|
-
<AccordionRadixSamples.AccordionFAQSample />
|
|
137
|
-
</PreviewCode>
|
|
138
|
-
|
|
139
|
-
## API Reference
|
|
140
|
-
|
|
141
|
-
### Composable API
|
|
142
|
-
|
|
143
|
-
| Component | Description |
|
|
144
|
-
|-----------|-------------|
|
|
145
|
-
| `Accordion` | The root component that manages accordion state and variant. |
|
|
146
|
-
| `AccordionItem` | A single collapsible section container. |
|
|
147
|
-
| `AccordionTrigger` | The clickable header that toggles content visibility. |
|
|
148
|
-
| `AccordionContent` | The collapsible content panel. |
|
|
149
|
-
|
|
150
|
-
### Accordion
|
|
151
|
-
|
|
152
|
-
The root component that manages accordion state. Set `variant` here to style all child components.
|
|
153
|
-
|
|
154
|
-
<ParametersTable
|
|
155
|
-
type="AccordionProps"
|
|
156
|
-
parameters={[
|
|
157
|
-
{
|
|
158
|
-
name: "type",
|
|
159
|
-
type: '"single" | "multiple"',
|
|
160
|
-
required: true,
|
|
161
|
-
description: "Whether only one or multiple items can be open at once.",
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
name: "collapsible",
|
|
165
|
-
type: "boolean",
|
|
166
|
-
default: "false",
|
|
167
|
-
description: "When type is 'single', allows closing the open item by clicking it again.",
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
name: "defaultValue",
|
|
171
|
-
type: "string | string[]",
|
|
172
|
-
description: "The default open item(s) (uncontrolled).",
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
name: "value",
|
|
176
|
-
type: "string | string[]",
|
|
177
|
-
description: "The controlled open item(s).",
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
name: "onValueChange",
|
|
181
|
-
type: "(value: string | string[]) => void",
|
|
182
|
-
description: "Callback when the open item(s) change.",
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
name: "variant",
|
|
186
|
-
type: '"default" | "outline" | "ghost"',
|
|
187
|
-
default: '"default"',
|
|
188
|
-
description: "The visual style of the accordion. Child components inherit this automatically.",
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
name: "className",
|
|
192
|
-
type: "string",
|
|
193
|
-
description: "Additional CSS classes.",
|
|
194
|
-
},
|
|
195
|
-
]}
|
|
196
|
-
/>
|
|
197
|
-
|
|
198
|
-
### AccordionItem
|
|
199
|
-
|
|
200
|
-
A single collapsible section container.
|
|
201
|
-
|
|
202
|
-
<ParametersTable
|
|
203
|
-
type="AccordionItemProps"
|
|
204
|
-
parameters={[
|
|
205
|
-
{
|
|
206
|
-
name: "value",
|
|
207
|
-
type: "string",
|
|
208
|
-
required: true,
|
|
209
|
-
description: "A unique identifier for this item.",
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
name: "disabled",
|
|
213
|
-
type: "boolean",
|
|
214
|
-
description: "Whether the item is disabled.",
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
name: "className",
|
|
218
|
-
type: "string",
|
|
219
|
-
description: "Additional CSS classes.",
|
|
220
|
-
},
|
|
221
|
-
]}
|
|
222
|
-
/>
|
|
223
|
-
|
|
224
|
-
### AccordionTrigger
|
|
225
|
-
|
|
226
|
-
The clickable header that toggles content visibility.
|
|
227
|
-
|
|
228
|
-
<ParametersTable
|
|
229
|
-
type="AccordionTriggerProps"
|
|
230
|
-
parameters={[
|
|
231
|
-
{
|
|
232
|
-
name: "className",
|
|
233
|
-
type: "string",
|
|
234
|
-
description: "Additional CSS classes.",
|
|
235
|
-
},
|
|
236
|
-
]}
|
|
237
|
-
/>
|
|
238
|
-
|
|
239
|
-
### AccordionContent
|
|
240
|
-
|
|
241
|
-
The collapsible content panel.
|
|
242
|
-
|
|
243
|
-
<ParametersTable
|
|
244
|
-
type="AccordionContentProps"
|
|
245
|
-
parameters={[
|
|
246
|
-
{
|
|
247
|
-
name: "className",
|
|
248
|
-
type: "string",
|
|
249
|
-
description: "Additional CSS classes.",
|
|
250
|
-
},
|
|
251
|
-
]}
|
|
252
|
-
/>
|
|
253
|
-
|
|
254
|
-
### Style Variants (CVA)
|
|
255
|
-
|
|
256
|
-
| Export | Description |
|
|
257
|
-
|--------|-------------|
|
|
258
|
-
| `accordionVariants` | Styles for the accordion container. |
|
|
259
|
-
|
|
260
|
-
```tsx
|
|
261
|
-
import { accordionVariants } from "@/components/assistant-ui/accordion";
|
|
262
|
-
|
|
263
|
-
<div className={accordionVariants({ variant: "outline" })}>
|
|
264
|
-
Custom Accordion Container
|
|
265
|
-
</div>
|
|
266
|
-
```
|