For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt, and this page is available as Markdown at /zh/guides/advanced-features/mcp-apps/deployment.md.
  • 简体中文
  • 构建与部署

    modern build 由 MCP Apps 插件调用服务端编译器,将根目录定义编译到 dist/mcp_apps.js,静态导入的 handler 按相对路径输出。.mts、.cts 定义分别输出 .mjs、.cjs。 modern serve 只使用这些产物。modern deploy 生成可移动的 .output/,通过 node .output/index.js 启动,无须原源码目录。

    默认 UI HTML 位于 dist/mcp-apps/ui/;必须同时部署应用静态资源或设置资源 CDN。 资源地址默认以公开 MCP origin 为基准,也可配置 dev.assetPrefix / output.assetPrefix。也可用 view.html 指定独立 HTTPS HTML URL,由服务端读取,并用 view.csp 声明其网络权限。MF 模式使用 MF 原有产物独立发布。生产定义可通过环境变量设置远程资源地址, 但 local handler 模块集合需要与构建时一致。运行时读取的独立文件、原生 addon 等额外资产仍由应用管理部署。

    核心包可直接接收应用导入的 definition:createMcpHandler(definition)。 服务端定义和工具函数使用应用的服务端编译器;纯 mcp-server 模板仍通过手写 BFF 入口输出到 dist/api/。

    当前不提供持久 MCP 会话、恢复 SSE 或跨请求取消。标准 MF 已验证,各目标产品宿主应分别验收。

    Hono 独立部署

    import path from 'node:path';
    import { Hono } from 'hono';
    import { mcpApps } from '@modern-js/mcp-apps/hono';
    import { loadMcpAppsConfig, bindUiResources } from '@modern-js/mcp-apps/server';
    
    const root = path.resolve('application');
    const definition = await loadMcpAppsConfig(path.join(root, 'mcp_apps.js'));
    const app = new Hono();
    app.all(
      '/mcp',
      mcpApps({
        definition: bindUiResources(definition, {
          directory: path.join(root, 'mcp-apps/ui'),
          assetBase: 'request',
        }),
      }),
    );

    部署编译后的定义、导入的 handler、dist/mcp-apps/ 资源及应用静态文件,并安装 handler 使用的外部依赖。 该适配器不监听端口,鉴权、监听和部署由用户的 Hono 应用管理;Modern.js 默认通过 BFF 自动挂载 MCP 入口。

    BFF TypeScript 开发依赖 ts-node(^10.9.2),模板已添加到 devDependencies。 ESM 项目需同时设置 package.json 的 "type": "module",以及 TypeScript 的 module: "esnext" 和 moduleResolution: "bundler"。

    MF manifest 和 chunks 由应用静态服务或 CDN 托管。MF 模板通过 server/modern.server.ts 为公共 /static/* 资源配置 CORS,并处理 OPTIONS,在开发和生产模式均生效,不影响 /mcp。改用 CDN 时,也需在 CDN 配置 CORS。MCP 插件本身不会注册 MF 资产路由或添加 CORS 响应头。

    独立部署本地视图时,将完整 dist/ 复制到上例的 application/,保留 package.json 的名称、版本和模块类型,以及所有导入模块的相对路径。通过静态服务提供 /static/*,或将其发布到构建时配置的资源 CDN。适配器只提供 MCP 路由,不提供静态资源服务。

    所有 MF 视图都需要显式配置完整的 remotes[].baseUrl 和 CSP。该地址原样传给 MF runtime 加载。纯工具模板通过手动 BFF 路由编译到 dist/api/。

    仅构建 UI 并接入自建 MCP Server,参见接入自建 MCP Server。