WebMCP + WebSkills:企业级智能化页面操控方案,兼顾隐私安全与高效落地

SAP 财务BAPI_ACC_DOCUMENT_POST批导的税务tax 最近遇到了关于SAP财务凭证批导要bapi:BAPI_ACC_DOCUMENT_POST增加税的功能要求,查阅了一众文献发现都不尽如人意,所以想着自己写一个趟过的雷吧。 一般前台sap的凭证是有自动计算税码的勾选框的,但是bapi却并没有这个字段。 实际操作过程中1.可以定义一个税额的结构,参考bapiactx09 2.在会计分录上传如果需要增加税码的时候,譬如总账gl,需要对应tax_code 3.通过CALCULATE_TAX_FROM_GROSSAMOUNT 计算出税额和acct_k... 阅读详情

本文由云软件体验技术团队郑志超原创。

前言

🌟 情景再现:小明的“职场救赎”

这是小明入职这家大型电商平台公司的第一天。屁股还没坐热,老板就走过来丢下一个紧急任务:“小明,有个大客户叫王五,因为百亿补贴活动,我们需要给他补发一个 1000 元的价保申请单。你赶紧操作一下,客户等着呢。”

小明愣住了。作为刚入职不到两小时的新人,他甚至连后台系统的入口、各级菜单的功能都还没摸清,更别提复杂的价保审核流程和财务对账逻辑了。看着老板匆忙离去的背影,小明坐在工位上对着密密麻麻的业务后台菜单发呆,心里焦虑万分,又不敢在这时候去打扰忙碌的老板请教这种“基础操作”。

这时,坐在旁边的小红看出了小明的窘迫,笑着指了指屏幕右下角的图标:“别愁啦,咱们公司的管理后台集成了 WebMCP + WebSkills 智能系统。你直接跟它说话就行。”

小明半信半疑地打开助手,试着输入了一句: “帮我给用户王五创建一个价保申请单,金额 1000 元,原因为百亿补贴。”

奇迹发生了!系统立刻自动定位到了用户管理模块,识别了王五的身份,并调取了相关的订单信息。几秒钟后,屏幕上直接弹出了一个预填好的申请单确认框,上面清晰地列出了所有申请细节,并提示:“已为您准备好价保申请单,请确认无误后点击‘提交’。”

小明屏住呼吸,轻轻一点确认按钮,任务圆满完成。

原本以为要折腾一上午的复杂业务,竟然在一句话之间就解决了。这个“神操作”不仅让小明保住了入职第一天的体面,更让他真实感受到了智能化应用带来的效率革命。

以下是模拟小明操作的视频演示(欢迎访问 在线演示地址 亲自体验):
在这里插入图片描述

内容摘要:本文深度解析了 WebMCP + WebSkills 这套专为前端页面驱动设计的“组合拳”方案。通过解决现有自动化方案(无障碍适配、视觉模型)在安全性、成本及适配难度上的核心痛点,提供了 Vue、Angular 及 React 三大主流技术栈的工程级最佳实践,助力开发者在不改变现有业务系统的架构下,实现极简、高效、安全的 AI 驱动页面操作。同时,借助 WebAgent 远程遥控,用户只需手机扫码或输入识别码,即可通过移动端直接遥控桌面页面——这是 WebMCP 在交互体验上的重大突破。

1. 背景与痛点

1.1 场景引子:为什么页面自动化这么难?

做前端工程、AI业务接入的小伙伴,是不是都有过这样的崩溃时刻?想实现页面自动化操作,要么被各种方案的坑绊住脚,要么配置复杂到让人头大,好不容易跑通还面临安全隐患……别慌!这篇文档要介绍的“组合拳”——WebMCP+WebSkills,就是帮你在不大改现有系统的前提下,把页面操作做得又稳又安全。
在这里插入图片描述

1.2 业界主流方案与痛点

先吐个槽:业界现有方案,坑是真的多!

在 WebMCP 出现之前,咱们做页面操作自动化,主流就两种方案,但说句实在话,用起来都让人一言难尽,痛点直接拉满:

方案一:基于无障碍信息(如 chrome-devtools-mcp)

听着挺专业,但实际用起来全是“门槛”:首先得要求业务系统页面做好完善的无障碍信息适配,可现实里很多老项目、复杂业务页面,根本达不到这个要求;其次,业务逻辑一旦复杂,基于无障碍信息的操作就会出现各种不确定性,时而正常时而报错,排查起来比找 bug 还难;更麻烦的是,想用它还得额外装浏览器扩展插件,或者依赖 playwright 等工具,步骤繁琐,兼容性还参齐不齐。

方案二:基于视觉模型截图操作

这个方案看似不用适配页面,实则“费钱又费时间”:视觉模型运行起来特别消耗 token,长期用下来成本蹭蹭涨;而且执行速度慢得让人着急,复杂业务操作能卡到你怀疑人生;最关键的是,它根本扛不住复杂业务系统的考验,稍微多几个交互步骤就直接“罢工”。

共同致命伤:安全不可控

不管是无障碍信息方案,还是视觉模型方案,都存在一个核心隐患——安全性。两种方案都需要一定程度上获取页面敏感信息,且缺乏有效的安全管控机制,一不小心就可能造成数据泄露,给业务带来不可挽回的损失。
在这里插入图片描述

1.3 WebMCP + WebSkills 的定位

就在大家被这些痛点折磨得焦头烂额时,WebMCP+WebSkills 横空出世,直接精准戳中所有痛点,给前端页面操作自动化带来了新希望!

WebMCP 不是“替代者”,而是“最强补充”

很多小伙伴会误以为 WebMCP 是要取代业界现有的 MCP 协议,其实不然!WebMCP 是基于业界 MCP 协议打造的前端优化方案,核心定位是“补充和增强”——它保留了 MCP 协议的核心优势,同时针对前端页面操作的痛点做了针对性优化,让页面操作更简单、更高效、更安全。

WebSkills:让 AI 真的“懂你的业务”

而 WebSkills 则是 WebMCP 的“神助攻”,它能进一步增强 AI 对业务的理解能力,让页面操作自动化更智能,哪怕是复杂的业务场景,也能轻松应对,两者搭配使用,直接实现“1+1>2”的效果。

WebAgent 远程遥控:移动端直接操控桌面页面

WebMCP + WebSkills 还有一个杀手级亮点——远程遥控。通过 useWebAgentServer 将本地 MCP Server 桥接到远端 Agent 平台,用户扫描二维码或输入 6 位识别码,即可在手机上通过自然语言指令遥控桌面浏览器页面。真正实现"移动端说一句话,桌面页面帮你干活"。
在这里插入图片描述

2. 三大技术栈最佳实践总览

干货来袭:三大技术栈最佳实践,直接抄作业!

不管你是用 Vue、React 还是 Angular,WebMCP+WebSkills 都能完美适配,而且实现方式高度统一:核心是通过前端路由 + 页面工具(Page Tool Bridge)把业务页面和 MCP 工具打通,再通过 WebSkills 和 TinyRemoter 做“知识与对话入口” 。下面分别给出 Vue / Angular 的摘要示例,并附上工程级最佳实践链接。

2.1 Vue 工程最佳实践(摘要)

源码工程:packages/doc-ai
完整工程路径:packages/doc-ai
详细文档:docs/guide/vue-webmcp-best-practice.md

步骤 1:安装依赖

pnpm add @opentiny/next-sdk @opentiny/next-remoter

说明:这里直接引入 WebMCP 核心 SDK 与 TinyRemoter 组件包,为后续“页面工具 + 对话框 UI”打基础。

步骤 2:在 main.ts 中注册路由导航器

// src/main.ts
import { createApp } from 'vue'
import router from './router'
import App from './App.vue'
import { setNavigator } from '@opentiny/next-sdk'

const app = createApp(App)
app.use(router)
app.mount('#app')

// 告诉 SDK:需要跳转页面时统一走 router.push
setNavigator((route) => router.push(route))

中文小结:setNavigator 是 Page Tool Bridge 的前提,只需在入口调用一次,之后所有“与页面绑定的工具”在执行时都会通过这里完成路由跳转。

步骤 3:配置业务路由

// src/router/index.ts
import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/', component: () => import('../views/home/index.vue') },
    { path: '/product-list', component: () => import('../views/product-list/index.vue') },
    { path: '/price-protection', component: () => import('../views/price-protection/index.vue') }
  ]
})

export default router

中文小结:后面在 registerTool 和 registerPageTool 里会引用这些 path,请保持一致,避免因为路由不对导致工具调用超时。

步骤 4:创建 MCP Server,并通过 withPageTools 绑定路由

// src/mcp-servers/index.ts
import {
  WebMcpServer,
  createMessageChannelPairTransport,
  withPageTools,
  registerNavigateTool
} from '@opentiny/next-sdk'
import registerProductGuideTools from './product-guide/tools'
import registerPriceProtectionTools from './price-protection/tools'

const rawServer = new WebMcpServer()
const [serverTransport, clientTransport] = createMessageChannelPairTransport()

export const server = withPageTools(rawServer)
export { clientTransport }

export const createMcpServer = async () => {
  registerNavigateTool(rawServer)
  registerProductGuideTools(server)
  registerPriceProtectionTools(server)
  await rawServer.connect(serverTransport)
}

中文小结:withPageTools 让工具可以和路由产生映射;registerNavigateTool 注册了一个通用的 navigate_to_page 工具,供大模型主动发起“先跳转再用页面工具”的链路。

步骤 5:注册与页面绑定的业务工具

// src/mcp-servers/product-guide/tools.ts
import { z } from '@opentiny/next-sdk'
import type { PageAwareServer } from '@opentiny/next-sdk'

const registerProductGuideTools = (server: PageAwareServer) => {
  server.registerTool(
    'product-guide',
    {
      title: '产品指南',
      description: '根据产品 ID 获取产品详细信息',
      inputSchema: {
        productId: z.string().describe('产品 ID')
      }
    },
    { route: '/product-list' } // 工具执行时自动导航到该路由
  )
}

export default registerProductGuideTools

中文小结:第三个参数 { route: '/product-list' } 是关键,它告诉 SDK“这个工具需要在哪个页面内执行”,从而触发 Page Tool Bridge 的自动跳转与消息投递。

步骤 6:在页面内通过 registerPageTool 注册工具处理器

<!-- src/views/product-list/index.vue -->
<template>
  <div class="products-page">
    <div v-for="product in products" :key="product.id">{{ product.name }} - ¥{{ product.price }}</div>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue'
import { registerPageTool } from '@opentiny/next-sdk'
import productsData from './products.json'

type Product = {
  id: number
  name: string
  price: number
  stock: number
  status: 'on' | 'off' | string
}

const products = ref<Product[]>(productsData as Product[])
let cleanupPageTool: () => void

onMounted(() => {
  cleanupPageTool = registerPageTool({
    handlers: {
      'product-guide': async ({ productId }: { productId: string }) => {
        const product = products.value.find((p) => String(p.id) === productId)
        const text = product ? `产品信息:${JSON.stringify(product, null, 2)}` : `未找到产品 ID 为 ${productId} 的商品`
        return { content: [{ type: 'text', text }] }
      }
    }
  })
})

onUnmounted(() => cleanupPageTool?.())
</script>

中文小结:页面挂载时把 handler 注册进去,卸载时清理;handler 中可以直接访问 Vue 响应式数据,实现“AI 调工具 → 工具调页面逻辑”的完整闭环。

步骤 7:在 App.vue 中挂载 TinyRemoter + Skills,并接入远程遥控(可选)

<!-- src/App.vue -->
<template>
  <div class="app-container">
    <router-view />
    <TinyRemoter
      :show="true"
      :skills="skillMdModules"
      :mcpServers="mcpServers"
      :menuItems="menuItems"
      title="智能助手"
      :llmConfig="llmConfig"
    />
  </div>
</template>

<script setup lang="ts">
import { onMounted, ref } from 'vue'
import { TinyRemoter } from '@opentiny/next-remoter'
import { createMcpServer, clientTransport } from './mcp-servers'
import { useWebAgentServer } from './mcp-servers/useWebAgentServer'

const llmConfig = {
  apiKey: import.meta.env.VITE_LLM_API_KEY || 'your-api-key-placeholder',
  baseURL: import.meta.env.VITE_LLM_BASE_URL || 'https://api.openai.com/v1',
  providerType: 'openai',
  model: 'gpt-4o',
  maxSteps: 10
}

const skillMdModules = import.meta.glob('./skills/**/*', {
  query: '?raw',
  import: 'default',
  eager: true
}) as Record<string, string>

const mcpServers = {
  'my-mcp-server': {
    type: 'local' as const,
    transport: clientTransport
  }
}

const menuItems = ref<any[]>([])

onMounted(async () => {
  // 本地 MCP 核心功能:失败直接抛出
  await createMcpServer()

  // 远程遥控增强功能:失败只打印警告,不影响本地对话
  try {
    const result = await useWebAgentServer()
    if (result?.sessionId) {
      const remoteUrl = `https://agent.opentiny.design/mcp?sessionId=${result.sessionId}`
      menuItems.value = [
        { action: 'remote-url', text: '遥控器链接', desc: remoteUrl, tip: remoteUrl, active: true, showCopyIcon: true },
        { action: 'remote-control', text: '识别码', desc: result.sessionId.slice(-6), know: true, showCopyIcon: true }
      ]
    }
  } catch (err) {
    console.warn('[WebAgent] 远程遥控初始化失败,本地功能不受影响:', err)
  }
})
</script>

中文小结:menuItems 在 WebAgent 连接成功后填充,TinyRemoter 会自动在悬浮菜单中显示"遥控器链接"和"识别码"。本地 MCP 与远程遥控必须分开 try/catch 处理,避免网络问题导致本地对话功能也一起失效。详细接入方式见 远程遥控亮点章节。

2.2 Angular 工程最佳实践(摘要)

源码工程:packages/doc-ai-angular
完整工程路径:packages/doc-ai-angular
详细文档:docs/guide/angular-webmcp-best-practice.md

Angular 与 Vue 最大的差异在于:TinyRemoter 是 Vue 组件,Angular 不能直接引入,需要通过 iframe + MessageChannel 与主应用通讯。

整体架构:

  • • Angular 主应用:负责路由、业务页面、WebMCP Server、registerPageTool
  • • Vue Remoter 子应用(iframe 内):负责 TinyRemoter UI + Skills,使用 createMessageChannelClientTransport 连接主应用

步骤 1:在根组件中注册 setNavigator 并启动 MCP Server

// src/app/app.component.ts
import { Component, OnInit, inject } from '@angular/core'
import { Router, RouterOutlet } from '@angular/router'
import { setNavigator } from '@opentiny/next-sdk'
import { createMcpServer } from '../mcp-servers'

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [RouterOutlet],
  templateUrl: './app.component.html',
  styleUrl: './app.component.scss'
})
export class AppComponent implements OnInit {
  private router = inject(Router)

  async ngOnInit(): Promise<void> {
    setNavigator(async (route) => {
      const navigated = await this.router.navigateByUrl(route)
      if (!navigated) {
        throw new Error(`页面跳转失败:导航至 "${route}" 被取消或拦截`)
      }
    })

    await createMcpServer()
  }
}

中文小结:和 Vue 版类似,这里统一封装“页面跳转策略”,同时在应用入口启动 MCP Server,确保后续 iframe 连接时已有可用的工具服务。

步骤 2:在根模板中通过 iframe 嵌入 Remoter

<!-- src/app/app.component.html -->
<div class="app-container">
  <div class="main-content">
    <router-outlet />
  </div>
  <aside class="remoter-sidebar">
    <iframe class="remoter-frame" src="/remoter.html" frameborder="0" allow="clipboard-write" title="AI 助手"></iframe>
  </aside>
</div>

中文小结:/remoter.html 会通过代理指向 Remoter 子应用入口(例如 Vite dev server 的 /remoter/),两端同源后即可使用 MessageChannel 互通。

步骤 3:在主窗口创建 MCP Server,并暴露 MessageChannel 服务端

// src/mcp-servers/index.ts
import {
  WebMcpServer,
  createMessageChannelServerTransport,
  withPageTools,
  registerNavigateTool
} from '@opentiny/next-sdk'
import registerProductGuideTools from './product-guide/tools'
import registerPriceProtectionTools from './price-protection/tools'

const rawServer = new WebMcpServer()
export const server = withPageTools(rawServer)

export const createMcpServer = async () => {
  registerNavigateTool(rawServer)
  registerProductGuideTools(server)
  registerPriceProtectionTools(server)

  const serverTransport = createMessageChannelServerTransport('local-mcp')
  await serverTransport.listen()
  await rawServer.connect(serverTransport)
}

中文小结:这里不再使用“同窗口内存对”的 createMessageChannelPairTransport,而是用 createMessageChannelServerTransport('local-mcp') 等待 iframe 侧主动连入。

步骤 4:在 Angular 页面中注册页面工具处理器

// src/app/pages/comprehensive/comprehensive.component.ts(节选)
import { Component, OnInit, OnDestroy } from '@angular/core'
import { registerPageTool } from '@opentiny/next-sdk'

@Component({
  /* 模板与样式省略 */
})
export class ComprehensiveComponent implements OnInit, OnDestroy {
  products: Product[] = productsData as Product[]
  private cleanupPageTool!: () => void

  ngOnInit(): void {
    this.cleanupPageTool = registerPageTool({
      handlers: {
        'product-guide': async ({ productId }: { productId: string }) => {
          const product = this.products.find((p) => String(p.id) === productId)
          const text = product
            ? `产品信息:${JSON.stringify(product, null, 2)}`
            : `未找到产品 ID 为 ${productId} 的商品`
          return { content: [{ type: 'text', text }] }
        }
      }
    })
  }

  ngOnDestroy(): void {
    this.cleanupPageTool?.()
  }
}

中文小结:写法和 Vue 版高度类似,只是生命周期钩子由 onMounted/onUnmounted 换成了 ngOnInit/ngOnDestroy,其余 Page Tool Bridge 行为完全一致。

步骤 5:在 Remoter 子应用中,通过 createMessageChannelClientTransport 连接主窗口

<!-- remoter/src/App.vue(节选) -->
<template>
  <tiny-remoter :skills="skillMdModules" :show="true" :fullscreen="true" :mcpServers="mcpServers" />
</template>

<script setup lang="ts">
import { TinyRemoter } from '@opentiny/next-remoter'
import { createMessageChannelClientTransport } from '@opentiny/next-sdk'

const skillMdModules = import.meta.glob('./skills/**/*', {
  query: '?raw',
  import: 'default',
  eager: true
}) as Record<string, string>

const clientTransport = createMessageChannelClientTransport('local-mcp', window.parent)

const mcpServers = {
  'local-mcp-server': {
    type: 'local',
    transport: clientTransport
  }
}
</script>

中文小结:endpoint 'local-mcp' 和主窗口必须一致,通过这一对 Transport,TinyRemoter 就可以把所有工具调用发送到 Angular 主应用,再由 Page Tool Bridge 转发到具体页面。

2.3 React 工程最佳实践(工程入口)

源码工程:packages/doc-ai-react
完整工程路径:packages/doc-ai-react

React 工程的整体架构与 Angular 工程高度一致,同样是:

  • 主应用(React SPA) :直接对接 @opentiny/next-sdk,在浏览器中创建 WebMCP Server、注册业务工具,结合路由和 registerPageTool 在各业务页面内挂载页面工具处理器;
  • Remoter 子应用(Vue) :作为一个独立的前端子工程,通过 iframe 嵌入到 React 主应用中,内部渲染 TinyRemoter 组件并加载 WebSkills 文档;
  • 通信方式:主应用和 iframe 之间通过 MessageChannel 建立连接,主应用侧暴露服务端 Transport,Remoter 侧创建客户端 Transport,最终由 TinyRemoter 将对话中的工具调用透传到 React 主应用,再由 Page Tool Bridge 负责路由跳转和页面内业务逻辑执行。

简单理解:React 主应用负责“工具和页面”,Remoter 子应用负责“对话 UI 和技能文档”,两者通过 iframe + MessageChannel 打通,整体模式与 Angular 版本完全一致。示例工程可参考 packages/doc-ai-react,根据你的 React 路由和对话组件做适配即可。

2.4 远程遥控:跨设备遥控桌面的杀手级亮点 🎮

这是 WebMCP 区别于所有现有方案的独家能力:无需任何额外硬件或客户端,用手机扫一扫,就能用自然语言遥控桌面浏览器上的业务系统。

原理一句话
桌面浏览器(WebMCP Server)
    ↕ WebSocket 长连接
远端 Agent 平台(sessionId 路由)
    ↕
手机浏览器(遥控端 UI)
    ↓ 用户语音/文字指令
AI 解析意图 → 调用 MCP 工具 → 桌面页面执行 → 结果回显到手机

本地 MCP Server 通过 useWebAgentServer 向远端 Agent 平台注册,获得唯一 sessionId。手机端打开遥控页面并输入识别码(sessionId 后 6 位)或扫描二维码,即与桌面建立会话。

核心 API:useWebAgentServer
// src/mcp-servers/useWebAgentServer.ts
import { WebMcpServer, WebMcpClient, createMessageChannelPairTransport, withPageTools } from '@opentiny/next-sdk'
import { registerAllTools } from './common'

const rawServer = new WebMcpServer()
const client = new WebMcpClient()
const [serverTransport, clientTransport] = createMessageChannelPairTransport()
export const server = withPageTools(rawServer)

const SESSION_ID_KEY = 'web-agent-session-id'

export const useWebAgentServer = async () => {
  registerAllTools(server)
  await rawServer.connect(serverTransport)
  await client.connect(clientTransport)

  const cachedSessionId = localStorage.getItem(SESSION_ID_KEY) ?? undefined
  const { sessionId } = await client.connect({
    sessionId: cachedSessionId,
    agent: true,
    url: 'https://agent.opentiny.design/api/v1/webmcp-trial/mcp'
  })

  if (sessionId) localStorage.setItem(SESSION_ID_KEY, sessionId)
  return { sessionId }
}
三步快速接入

① 创建 useWebAgentServer.ts(如上)

② 在 onMounted 中分离调用(错误隔离是关键!)

onMounted(async () => {
  await createMcpServer() // 本地 MCP:失败直接抛出(核心功能)

  try {
    const result = await useWebAgentServer() // 远程遥控:失败只警告(增强功能)
    if (result?.sessionId) {
      const remoteUrl = `https://agent.opentiny.design/mcp?sessionId=${result.sessionId}`
      menuItems.value = [
        { action: 'remote-url', text: '遥控器链接', desc: remoteUrl, tip: remoteUrl, active: true, showCopyIcon: true },
        { action: 'remote-control', text: '识别码', desc: result.sessionId.slice(-6), know: true, showCopyIcon: true }
      ]
    }
  } catch (err) {
    console.warn('[WebAgent] 远程遥控初始化失败,不影响本地功能:', err)
  }
})

⚠️ 为什么必须分开 try/catch? 若合并在同一 await 链,网络抖动导致 useWebAgentServer 失败时,整个 onMounted 会 reject,本地对话也随之失效。分开后,远程功能降级,本地始终可用。

③ 将 menuItems 传给 TinyRemoter

<TinyRemoter :menuItems="menuItems" :mcpServers="mcpServers" :skills="skillMdModules" />
⚠️ 关键细节:desc 必须存完整 URL
// ✅ 正确:desc 存带 sessionId 的完整链接
{ action: 'remote-url', desc: `${AGENT_ROOT}/mcp?sessionId=${result.sessionId}`, ... }

// ❌ 错误:desc 只存裸域名,复制后无法建立遥控会话
{ action: 'remote-url', desc: AGENT_ROOT, ... }

TinyRemoter 的复制按钮优先读取 desc 字段,若只是裸域名则复制内容缺少 sessionId,手机端无法建立遥控会话。

完整交互时序
① 桌面打开页面
    → createMcpServer():本地 MCP 启动完毕
    → useWebAgentServer():向 Agent 平台注册,获得 sessionId
    → TinyRemoter 菜单显示「遥控器链接」和「识别码」

② 用户扫码 / 复制链接 → 手机打开遥控端
    → 输入 6 位识别码(或链接自动携带 sessionId)
    → 与桌面建立 WebSocket 长连接(通过 Agent 平台路由)

③ 用户输入「帮我把库存里的 MacBook 下架」
    → AI 调用桌面的 MCP 工具 → Page Tool Bridge 自动跳转页面
    → 页面内处理器执行业务逻辑 → 结果返回给 AI → 回复用户
sessionId 持久化,刷新不丢会话

useWebAgentServer 内部将 sessionId 存入 localStorage(key:web-agent-session-id),刷新页面后自动复用,无需重新扫码。若 session 过期,Agent 平台会分配新 sessionId 并写回。

3. 总结

WebMCP + WebSkills + WebAgent 远程遥控,前端页面操作的"最优解"

对比业界现有方案,这套组合拳的优势一目了然:

能力亮点说明
🚫 无需复杂工具不用装浏览器插件,不用额外部署 playwright,轻量化接入
🔌 适配性更强不要求业务页面做复杂无障碍适配,新老系统都能稳定运行
💰 高效又省钱摆脱视觉模型的 token 消耗,执行速度快,长期成本低
🔒 安全可控从底层保障数据安全,避免敏感信息泄露
🌐 多技术栈Vue / React / Angular 全覆盖,实现方式统一
🎮 远程遥控(独家)手机扫码 / 输入识别码,即可跨设备遥控桌面页面,零门槛移动端 AI 操控

远程遥控:最值得期待的杀手级亮点 🚀

远程遥控是 WebMCP 区别于所有现有方案的独家能力,也是当前最值得优先体验的功能:

  • 用户无需安装任何 App,打开手机浏览器,扫描二维码或输入 6 位识别码即可;
  • 在手机上用自然语言下达指令,AI 实时调用桌面页面注册的 MCP 工具;
  • sessionId 自动持久化到 localStorage,刷新页面后无需重新扫码;
  • 本地对话与远程遥控完全解耦——即使远程初始化失败,本地 AI 对话功能照样可用。

未来,WebMCP + WebSkills + WebAgent 还会持续迭代优化,进一步简化接入流程、增强功能适配,覆盖更多复杂业务场景。

如果你也正在被页面操作自动化的痛点困扰,不妨直接去 GitHub 下载对应技术栈的最佳实践代码,跟着操作,分分钟解锁前端高效新姿势!

关于OpenTiny

欢迎加入 OpenTiny 开源社区。添加微信小助手:opentiny-official 一起参与交流前端技术~
参与 next-sdk 共建 → https://github.com/opentiny/webmcp-sdk(欢迎star)
使用 next-sdk → https://opentiny.design/next-sdk
关于我们:https://opentiny.design/opentiny-design/about

如果你有任何问题,欢迎在评论区留言交流!

【附源码】Node.js毕业设计高校院级校友信息管理系统(Express) 首先,该系统可以提高高校对校友信息管理的效率和准确性。通过系统提供的查询功能,高校可以方便地获取校友的最新联系方式和动态,及时了解校友的发展情况,为校友提供更好的服务和支持。总之,开发高校院级校友信息管理系统将为高校提供一个高效、便捷的工具,有助于提升校友管理水平和服务质量,促进高校与校友之间的良好互动关系。通过使用前端技术HTML、CSS、JavaScript和Vue框架,结合后端技术Node.js和Express框架,以及MySQL数据库,可以实现对校友信息的快速录入、查询、修改和删除等操作。 阅读详情

相关推荐

Ubuntu22.04 网络图标消失与连接故障排查指南(附实战修复流程)

本文详细介绍了Ubuntu22.04系统中网络图标消失与连接故障的排查与修复方法。通过ifconfig、dhclient等命令诊断问题,提供从紧急恢复网络连接到深度排查的完整解决方案,帮助用户快速恢复网络功能并预防类似问题再次发生。

weixin_28481133的博客 287

AI驱动的Web应用智能化:WebMCP、WebSkills与WebAgent的融合实践

本文探讨了WebMCP、WebSkills和WebAgent三层架构如何重塑前端智能化技术。WebMCP协议让AI直接与网页内核对话,WebSkills将开发经验转化为机器可读结构,WebAgent作为执行引擎实现自动化操作。这三层分别解决通信、知识和执行问题,共同降低了AI在Web端的应用门槛。目前该架构已应用于智能助手、UI测试和代码生成等场景,但仍面临生态成熟度、标准化和安全等挑战。未来Web应用将演变为"人机共用平台",开发者需要同时兼顾人类界面和机器接口的设计。这一架构为前端智

wdracky的专栏 626

Unity 2022打包Android APK:手把手教你创建和配置第一个签名Keystore(避坑指南)

本文详细介绍了Unity 2022打包Android APK时创建和配置签名Keystore的全流程,包括环境准备、Keystore创建、高级配置避坑指南以及签名验证与故障排查。特别强调了Android应用签名的重要性及安全维护策略,帮助开发者避免常见错误,确保应用顺利发布。

weixin_27379781的博客 241

前端智能化最佳实践:WebMCP + WebSkill + WebAgent

## 六、技术生态与现状 - **标准推进**:由 Google、Microsoft 联合发起,纳入 W3C WebML 社区组,Chrome 146+ 已支持实验性 API。 - **落地框架**:依托 OpenTiny NEXT 等前端框架,提供多语言 SDK,无缝接入 Vue、React 等生态。 - **适用场景**:SaaS 后台 AI 助手、电商智能交互、ERP/CRM 系统自动化、跨端办公协作等。

[Blog][Domain] programb.blog.youkuaiyun.com 1006

PID循迹控制算法

前言  让小车进行循迹最重要的是获取车相对于循迹线的位置,关于循迹模块的原理我已经在之前的一篇博客上讲过,如果大家没看过的话可以点此链接:PID循迹模块原理。 PID循迹原理简介 图1 循迹车寻线行走图示 图2 市场常见循迹传感器  PID循迹的原理我们大致可以用常识性思维去思考下,如图1所示为循迹车寻线行走图示,现在小车要按照中间那条黑线循迹行走,如果车头往左偏则需要控制方向盘让车往右转,车头往又偏则需要让车往左转。但是仅仅只有左转和右转的话,车一到左边就向右转,一到右边就向左转,则车会来回在线左右晃动

Dinvent的博客 7万+

海康视觉通讯配置

本文介绍了海康通讯管理中TCP和Modbus协议的配置方法。TCP通讯时,视觉系统作为服务器接收PLC客户端发送的触发信号,需注意十进制与十六进制字符串的转换。Modbus配置需填写PLC的IP地址和寄存器首地址,并预先定义整型变量。TCP通讯需开启16进制发送模式以避免数据格式问题。文章重点说明了不同通讯方式下的数据格式转换和参数设置要点。

A567852的博客 2243

组合拳(WebMCP + WebSkills + WebAgent)是目前将传统前端应用升级为“智能体驱动”的最高效路径

1. **权限控制(最重要)**:WebMCP 工具运行在用户当前会话上下文中。**切勿暴露超级管理员工具给普通用户**。必须在工具实现层做二次权限校验(`if (!user.isAdmin) throw error`)。 2. **工具粒度**:不要写“万能工具”。工具应细粒度化,如 `searchOrders` 和 `exportOrders` 分开,避免 AI 误操作。 3. **降级处理**:确保 WebMCP 连接失败时,页面基础功能不受影响(Graceful Degradation)。

[Blog][Domain] programb.blog.youkuaiyun.com 407

Qt 插件开发 plugin 超详细 有源码

Qt 插件化开发框架类似于前后端的微服务的场景,授权哪个微服务则前端可以使用哪个微服务,插件就行硬件插卡一样,可以被随时删除、插入和修改,所以结构很灵活,容易修改,方便软件的升级和维护;插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已;动态库需要访问.lib文件,而且在程序运行时必须保证.lib存在,否则无法正常启动;

q610098308的专栏 6547

如何从零开始学习Web开发:Web Skills项目完整指南

**Web Skills** 是一个可视化Web开发技能学习平台,帮助开发者系统掌握前端、后端、设计等全方位技能。无论你是刚刚入门的前端新手,还是希望提升技能的中级开发者,这个项目都能为你提供清晰的学习路径和丰富的资源。在前100个字内,让我们明确这个项目的核心价值:Web Skills通过直观的视觉化界面,展示了现代Web开发者需要掌握的各项技能,从HTML/CSS基础到React、Vue等框架

gitblog_00796的博客 754

【ARFoundation自学04】AR Tracked Image 图像追踪识别与对应类的调用

1.添加组件 2.创建图像识别库 3.创建识别后追踪的物体(UI、模型等)

leoysq的博客 2560

coredump文件的原理是啥

Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。

二进制君 384

Web 开发者零 AI 基础入门:Skill 开发实战全攻略

本文从Web开发者视角出发,介绍了AI时代的Skill开发模式。Skill将复杂AI能力封装为标准化模块,类比Vue/React组件,开发者无需精通大模型即可快速构建AI应用。文章详细讲解了Skill核心概念、工程化工具skill-creator、契约文件SKILL.md的规范语法,并通过SpringBoot+Vue3实现PDF文本提取的完整案例,展示了如何将Web开发经验迁移到AI领域。Skill开发复用组件化思维,采用标准化接口定义和工程化工具链,让Web开发者能够无缝切入AI应用开发,降低技术门槛。

爱人爱己,风生水起 742

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WebMCP:连接Web应用与本地大模型的标准化协议实践指南

在AI应用开发领域,如何安全、高效地将大语言模型(LLM)的能力集成到Web应用中,是开发者面临的核心挑战。传统方案往往需要在云端API的成本、延迟、隐私顾虑与本地部署的复杂运维之间做出权衡。WebMCP(Web Model Context Protocol)作为一种新兴的开放标准协议,旨在为这一问题提供优雅的解决方案。其核心原理是定义了Web前端与本地AI模型服务之间的标准化通信规范,实现了能力的安全隔离与动态扩展。该协议的技术价值在于,它将模型的计算与数据保留在用户信任的本地环境,同时通过一套类似“US

weixin_34116482的博客 268

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

从对话到协作:深度解析 WebMCP —— 开启浏览器端的 AI 智能体新时代

WebMCP(Web Model Context Protocol)是2025年初由Google和Microsoft工程师提出的新标准,旨在让AI智能体与网页进行结构化交互。它通过定义"机器层"API,使网页可直接向AI暴露功能,解决传统DOM解析方式的高成本和低稳定性问题。WebMCP提供声明式和命令式两种API模式,支持本地执行确保数据隐私,并可能重塑AI时代的SEO策略。目前该协议正在W3C标准化进程中,有望成为未来Web开发的基础设施,让网站本身成为AI可调用的"插件&

葡萄城技术团队博客 1869

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从 raw 文本到 CSV/JSON 列表:解析 ERC20 漏洞数据管线脚本 gen_list_from_raw.py

**awesome-buggy-erc20-tokens** 是一个收录以太坊链上缺陷 ERC20 代币合约的安全数据仓库。它的核心脚本 `gen_list_from_raw.py` 只需一条命令,就能把 `raw/` 目录下的 32 个纯文本地址文件,自动转换成 `csv/`、`json/` 目录的缺陷清单以及仓库根目录的汇总列表,是一条典型的"数据管线"。 [![ERC20 代币合约每日创建

gitblog_00995的博客 473

企业级落地全指南:WebMCP+WebSkills+WebAgent,定义前端智能化的终局架构

前端智能化3.0:从模拟点击到语义化交互的革命 当前行业正经历前端智能化的范式转变,从"AI模拟人操作UI"的2.0时代(依赖DOM解析和视觉识别)升级为"网页原生支持AI调用"的3.0时代。传统方案存在四大痛点:成功率低(复杂流程不足5%)、成本高(Token消耗指数增长)、业务规则理解差、安全隐患大。WebMCP+WebSkills+WebAgent三层架构通过将交互逻辑下沉到业务语义层,实现了确定性闭环:WebMCP作为执行层提供浏览器原生API支持;WebSk

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 529

练习开发Skill——网页内容抓取Skill(website-content-fetch)

本文介绍了AI辅助信息检索的现状及Skills开发实践。当前AI资料收集主要依赖模型自身能力,解决方案包括优化提示词、使用智能搜索工具等。重点讲解了Skills开发框架,包括项目结构(SKILL.md为核心)、元数据配置和脚本实现要求。作者以Node.js为例开发了网页内容抓取Skill,实现文本提取和媒体资源URL获取功能,包含axios请求、cheerio解析、文件保存等模块。该项目展示了如何通过Skills扩展AI能力,为特定任务提供定制化解决方案。

Aubrey.J的博客 2036

Jackson 序列化 / 反序列化注解 完整版笔记

Jackson 序列化 / 反序列化注解 完整版笔记

handsome_sai的博客 300

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 147

MCP 协议会成为前端 AI 工程的标准接口吗?

MCP(Model Context Protocol)正在成为连接 AI 模型与外部工具、数据源的一层通用协议。本文从 MCP 的核心机制出发,分析它在浏览器与前端工程中的落地边界,讨论它能否成为前端 AI 工程的标准接口,并给出当下更务实的架构选择建议。

m0_62937412的博客 365

LangGraph 本地 build 频频翻车,最终在服务器跑通流式对话

先说结论:我本地那个,一次都没成功过。三次,三次,全挂在拉镜像上。而顺得像刚上过油。这就很像我高中那辆自行车:骑着能走,一上锁就坏。那天晚上我盯着终端里那行红字看了很久,想的不是技术方案,想的是——为什么同一个工具,可以一边让我觉得自己很行,一边让我觉得自己不太行。

人工智能AI技术 120

海外平台频繁弹验证?从 DNS、WebRTC 到浏览器指纹的环境异常排查清单

在运营多地区海外平台账号时,即使代理节点通畅、TCP 握手成功,仍可能遇到频繁人机验证、地区限制、播放失败等异常。核心结论是:这类问题往往不在网络传输层,而在浏览器环境参数与网络出口之间的逻辑自洽性。本文从 DNS 泄漏、WebRTC 穿透、时区与语言匹配、Canvas/WebGL 指纹、TLS 特征五个维度,给出一份可复现的环境异常排查清单,并对比个人手动配置与工程化环境管理方案的适用边界。适用于跨境运营、多账号运维团队。

P1Browser【p1指纹浏览器】的博客 200

智能问诊的流程

本文介绍基于FastAPI构建的医疗多Agent系统MediAgent,通过症状分析、诊断推理与治疗建议等模块协同,实现从问诊到报告生成的完整工作流。系统采用前后端分离架构,结合MySQL、RabbitMQ与Docker实现工程化部署,支持异步化验结果接入。虽当前状态暂存于内存,但已具备可扩展性,未来可通过Redis持久化、消息队列联动及医疗安全机制完善,应用于慢病管理、辅助决策等场景,推动AI在医疗流程中的落地应用。

Joey 的工作空间~ 781

信号链电路怎么选运放?奥特四款信号链运放解析【选型参考】

在模拟电路设计中,运放作为信号链的“第一道门槛”,其微小误差往往决定了整个系统的成败。

naNa_1120的博客 193

流式输出 SSE:实现 AI 对话打字机效果后端开发

摘要解决传统 HTTP 请求在 LLM 长文本生成时导致的客户端长时间阻塞与 TTFT 极高的问题。适用于需为 AI 应用提供打字机效果、优化交互体验的后端开发工程师。读完可获得基于 FastAPI 与 SSE(Server-Sent Events)技术的流式响应实现代码、协议规范及生产环境避坑指南。关键词SSE、流式输出、FastAPI、打字机效果、TTFT、大模型推理背景与问题大模型(LLM)生成完整回复通常耗时数秒至数十秒,传统请求-响应模型导致用户界面长时间无响应,体验极差。

2402_85729970的博客 185

基于 YOLOv8 的森林火灾检测系统(Web 版)

本项目面向林区早期火情识别场景,使用YOLOv8完成火焰(Fire)与烟雾(Smoke)两类目标的检测模型训练,并以FastAPI构建 Web 检测平台,把模型能力封装为可直接登录使用的系统。平台除常规的图片、批量、视频、摄像头检测外,还提供同图多权重对比、数据集浏览与标注核对、模型热切换,以及把训练搬到网页上的能力:可在浏览器配置超参数发起真实训练,训练中在线调整学习率、查看进度与动态曲线,训练完成后下载产物或直接应用到检测。

Michael_Jay的博客 64
上一篇: AI-Extension:让 AI 真的「看得到、动得了」你的浏览器
下一篇: WebAgent :基于 MCP 协议打造的智能应用“超级路由器”
OpenTiny社区
博客等级 码龄4年 1540粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值