WebMCP 快速上手:Chrome 新推出的 AI 网页应用框架使用教程
前言
Google Chrome 团队最近发布了 WebMCP(Web Model Context Protocol)的早期预览版本,这是一个专为网页应用设计的模型上下文协议实现。对于正在构建 AI 驱动的网页应用的开发者来说,这是一个重大利好消息。本文将带你从零开始了解 WebMCP,并通过实战案例展示如何使用它来构建智能网页应用。
什么是 WebMCP?
WebMCP 是 Model Context Protocol(MCP)在 Web 环境中的实现。MCP 是一个开放协议,用于标准化 AI 模型与外部工具、数据源之间的通信方式。而 WebMCP 则将这一协议带入了浏览器环境,让网页应用能够安全、高效地与 AI 模型进行交互。
核心特性
- 标准化通信:统一的协议规范,简化 AI 集成流程
- 安全沙箱:在浏览器安全模型内运行,保护用户数据
- 跨模型兼容:支持多种 AI 模型后端,避免供应商锁定
- 实时交互:低延迟的流式响应,提升用户体验
- 工具调用:标准化的工具调用接口,扩展 AI 能力
为什么需要 WebMCP?
在 WebMCP 出现之前,开发者在网页中集成 AI 功能面临诸多挑战:
- 碎片化的集成方式:每个 AI 提供商都有自己的 API 和 SDK
- 安全风险:直接在客户端暴露 API 密钥存在安全隐患
- 上下文管理复杂:维护对话历史和上下文状态需要大量代码
- 工具调用不统一:不同模型的函数调用格式各异
WebMCP 通过标准化协议解决了这些问题,让开发者能够专注于应用逻辑而非集成细节。
环境准备
在开始之前,确保你的开发环境满足以下要求:
- 浏览器:Chrome 134+(支持 WebMCP 的最新版本)
- Node.js:18.0 或更高版本
- 代码编辑器:VS Code 或任何你喜欢的编辑器
- MCP Server:用于提供工具和资源的后端服务
安装步骤
# 1. 创建新项目目录 mkdir webmcp-demo && cd webmcp-demo # 2. 初始化 Node.js 项目 npm init -y # 3. 安装必要的依赖 npm install @modelcontextprotocol/sdk express cors # 4. 安装 TypeScript(可选但推荐) npm install -D typescript @types/node @types/express
构建第一个 WebMCP 应用
步骤一:创建 MCP Server
首先,我们需要创建一个简单的 MCP 服务器,它将提供 AI 模型可以调用的工具。
// server.js
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
const server = new McpServer({
name: 'demo-server',
version: '1.0.0'
});
// 注册一个天气查询工具
server.tool(
'get_weather',
'获取指定城市的天气信息',
{
city: z.string().describe('城市名称')
},
async ({ city }) => {
// 实际应用中调用天气 API
const weatherData = {
city,
temperature: '22°C',
condition: '晴朗',
humidity: '65%'
};
return {
content: [{
type: 'text',
text: JSON.stringify(weatherData, null, 2)
}]
};
}
);
// 启动服务器
const transport = new StdioServerTransport();
await server.connect(transport);
步骤二:创建 Web 前端
接下来,我们创建一个简单的网页界面来与 MCP 服务器交互。
<!-- index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebMCP 演示应用</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background: #f5f5f5;
}
.chat-container {
background: white;
border-radius: 12px;
padding: 20px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.messages {
height: 400px;
overflow-y: auto;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 15px;
margin-bottom: 15px;
}
.message {
margin-bottom: 15px;
padding: 10px 15px;
border-radius: 8px;
}
.user-message {
background: #e3f2fd;
margin-left: 20%;
}
.ai-message {
background: #f1f8e9;
margin-right: 20%;
}
.input-area {
display: flex;
gap: 10px;
}
input {
flex: 1;
padding: 12px;
border: 1px solid #ddd;
border-radius: 8px;
font-size: 16px;
}
button {
padding: 12px 24px;
background: #1976d2;
color: white;
border: none;
border-radius: 8px;
cursor: pointer;
font-size: 16px;
}
button:hover {
background: #1565c0;
}
</style>
</head>
<body>
<h1>🤖 WebMCP 智能助手</h1>
<div class="chat-container">
<div class="messages" id="messages"></div>
<div class="input-area">
<input type="text" id="userInput" placeholder="输入你的问题..." />
<button onclick="sendMessage()">发送</button>
</div>
</div>
<script type="module">
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
let client;
let sessionId = null;
async function initMCP() {
// 创建 MCP 客户端
const transport = new StdioClientTransport({
command: 'node',
args: ['server.js']
});
client = new Client({
name: 'webmcp-demo',
version: '1.0.0'
});
await client.connect(transport);
console.log('MCP 连接成功');
}
async function sendMessage() {
const input = document.getElementById('userInput');
const message = input.value.trim();
if (!message) return;
// 显示用户消息
addMessage(message, 'user');
input.value = '';
try {
// 调用 AI 模型(实际应用中需要连接真实的 AI 服务)
const response = await client.callTool({
name: 'get_weather',
arguments: { city: '北京' }
});
// 显示 AI 响应
const aiResponse = response.content[0].text;
addMessage(aiResponse, 'ai');
} catch (error) {
addMessage('抱歉,处理您的请求时出现错误:' + error.message, 'ai');
}
}
function addMessage(text, type) {
const messagesDiv = document.getElementById('messages');
const messageDiv = document.createElement('div');
messageDiv.className = `message ${type}-message`;
messageDiv.textContent = text;
messagesDiv.appendChild(messageDiv);
messagesDiv.scrollTop = messagesDiv.scrollHeight;
}
// 初始化
initMCP();
</script>
</body>
</html>
实际应用场景
场景一:智能客服系统
WebMCP 可以用于构建智能客服系统,让 AI 助手能够访问订单数据库、产品信息等内部资源:
// 注册订单查询工具
server.tool(
'query_order',
'查询用户订单状态',
{
orderId: z.string().describe('订单编号'),
userId: z.string().describe('用户 ID')
},
async ({ orderId, userId }) => {
// 查询数据库
const order = await db.orders.findOne({ orderId, userId });
return {
content: [{
type: 'text',
text: order ? JSON.stringify(order) : '未找到订单'
}]
};
}
);
场景二:数据分析助手
结合数据分析工具,WebMCP 可以让 AI 助手执行复杂的数据查询和可视化:
// 注册数据分析工具
server.tool(
'analyze_data',
'分析数据集并生成洞察',
{
dataset: z.string().describe('数据集名称'),
metrics: z.array(z.string()).describe('要分析的指标')
},
async ({ dataset, metrics }) => {
const analysis = await dataService.analyze(dataset, metrics);
return {
content: [{
type: 'text',
text: generateInsightReport(analysis)
}]
};
}
);
场景三:代码审查助手
为开发团队构建 AI 代码审查工具,集成 Git 和代码分析服务:
// 注册代码审查工具
server.tool(
'review_code',
'审查代码变更并提供建议',
{
repoUrl: z.string().describe('仓库 URL'),
pullRequestId: z.string().describe('PR 编号')
},
async ({ repoUrl, pullRequestId }) => {
const changes = await gitService.getChanges(repoUrl, pullRequestId);
const review = await aiService.reviewCode(changes);
return {
content: [{
type: 'text',
text: review.summary
}]
};
}
);
最佳实践
1. 安全性考虑
- 永远不要在客户端存储 API 密钥:所有敏感操作都应在服务器端执行
- 实施速率限制:防止滥用和意外的高额 API 费用
- 验证用户输入:对所有传入参数进行严格验证
- 使用 HTTPS:确保所有通信都经过加密
2. 性能优化
- 实现缓存机制:对频繁请求的数据进行缓存
- 使用流式响应:对于长文本响应,使用流式传输提升用户体验
- 批量处理请求:合并多个小请求以减少网络开销
- 监控响应时间:设置超时并监控性能指标
3. 错误处理
// 完善的错误处理示例
async function safeToolCall(toolName, args) {
try {
const result = await client.callTool({ name: toolName, arguments: args });
return { success: true, data: result };
} catch (error) {
console.error(`工具调用失败:${toolName}`, error);
return {
success: false,
error: error.message,
fallback: '抱歉,暂时无法完成此操作'
};
}
}
常见问题解答
Q1: WebMCP 与传统的 REST API 有什么区别?
WebMCP 是专门为 AI 模型交互设计的协议,支持工具发现、动态参数绑定和结构化响应。而 REST API 更适合传统的客户端 – 服务器通信。
Q2: 可以在生产环境中使用 WebMCP 吗?
目前 WebMCP 处于早期预览阶段,建议先在测试环境中评估。生产环境使用需要密切关注官方更新和安全公告。
Q3: 如何调试 WebMCP 应用?
Chrome DevTools 提供了 MCP 调试支持。你可以在 Console 中查看 MCP 消息,在 Network 面板中监控通信。
Q4: WebMCP 支持哪些 AI 模型?
WebMCP 是模型无关的,理论上支持任何实现了 MCP 协议的 AI 模型。目前主流模型提供商正在陆续添加 MCP 支持。
总结
WebMCP 为网页应用集成 AI 功能提供了一个标准化的解决方案。通过统一的协议规范,开发者可以更轻松地将 AI 能力融入到网页应用中,同时保持安全性和可维护性。
随着 AI 技术的持续发展,像 WebMCP 这样的标准化协议将变得越来越重要。它不仅能降低开发门槛,还能促进整个生态系统的健康发展。
如果你正在构建 AI 驱动的网页应用,不妨尝试一下 WebMCP。从简单的演示项目开始,逐步探索它能带来的可能性。
参考资源
注意:本文基于 WebMCP 早期预览版本编写,具体 API 和功能可能随版本更新而变化。建议参考官方文档获取最新信息。