应用
模式与限制
UI 模式、iframe 中不受支持的 Nuxt 功能,以及 API 参考。
模式
callTool 期间的骨架屏
pending 仅在进行中的 callTool 调用期间会切换为 true —— 非常适合在不丢失先前数据的情况下进行局部 UI 更新:
<button :disabled="pending" @click="callTool('color-picker', { base: nextBase })">
{{ pending ? '正在混合…' : '试试这个颜色' }}
</button>
适配全屏与内联
主机可以自行将应用以内联方式(较小)挂载,也可以在调用 requestDisplayMode() 后将其展开为全屏。hostContext.displayMode 会跟随主机报告的每次变化,因此可以据此切换布局:
<section :class="['rail', isFullscreen && 'rail-grid']">
<!-- 内联时水平滚动,全屏时使用 CSS grid -->
</section>
通过工具读取与写入
在 Claude 中(截至 2026 年 9 月),只有只读工具(annotations: { readOnlyHint: true })才能通过 iframe 发起调用;写入类工具调用会被丢弃并最终超时,无论该工具对模型可见还是仅供应用使用。使用 callTool / useToolCall 读取数据,并通过 sendPrompt 让模型处理写入操作。
应用间工作流
在应用 A 中使用 sendPrompt,并让 LLM 将请求分发到应用 B。用户会感知到平滑的过渡;LLM 仍然在流程中,并且可以携带参数继续传递:
<button @click="sendPrompt(`Generate a typography scale for ${swatch.hex}.`)">
与字体搭配
</button>
LLM 会从提示中选择正确的工具——保持名称可预测。
CSS 共置
使用 scoped styles 或任何会输出内联样式的 CSS-in-JS 方案。打包器会将所有样式内联到 HTML 中;不会从 iframe 发起外部 CSS 请求。
你目前无法做的事
MCP 应用运行在一个隔离的 iframe 中,无法访问你的 Nuxt 运行时上下文。这意味着:
- ❌ Nuxt UI / Nuxt Image / NuxtLink —— 它们需要父 Nuxt 应用的运行时。
- ❌ 自动导入的 Nuxt composables(
useFetch、useState、useRoute、useNuxtApp、…)。 - ❌ Pinia store 或应用级插件 —— 模块图不同。
- ❌ 来自父页面的 cookies、headers、session —— 沙盒化的 origin。
你可以使用的有:
- ✅ Vue 3 + Composition API(自动导入:
ref、computed、watch、onMounted、…)。 - ✅
useMcpApp()—— iframe 中唯一的工具包 composable。 - ✅
handler内部的$fetch(服务端)—— 调用任何 Nuxt API。 - ✅ 与 SFC 相邻的共置
.ts/.css辅助文件(打包器会将它们内联)。 - ✅ 无头 UI 库(Reka UI、Headless UI Vue、Floating UI)—— 它们与框架无关。
需要丰富组件?可以在你的 apps 目录中构建一个小型共置设计系统,例如
app/mcp/_components/ —— 任何导入它的应用都会将其打包进去。或者引入一个不依赖宿主运行时的无头库。参考
| API | 位置 | 作用 |
|---|---|---|
defineMcpApp() | <script setup> | 声明工具、schema、处理器和 CSP。它会从浏览器包中剥离。 |
useMcpApp<T>() | SFC 主体 | 响应式的 initialData、data、loading、hostContext、hostCapabilities,以及 callTool、sendPrompt、openLink、requestDisplayMode、updateModelContext、downloadFile。 |
useToolCall<T>() | SFC 主体,从 @nuxtjs/mcp-toolkit/app 导入 | 调用工具但不将其结果写入 data。 |
csp.resourceDomains | defineMcpApp | 图像、字体和样式来源的允许列表。 |
csp.connectDomains | defineMcpApp | fetch、XHR、WebSocket 来源的允许列表。 |
_meta | defineMcpApp | 除 ui.resourceUri 和 ui.csp 外,提供给主机的额外 _meta 字段。 |