应用部署
AppDeploy 技能
通过 HTTP API 将 Web 应用部署到 AppDeploy。
何时使用此技能
- 在规划或构建应用及 Web 应用时
- 将应用部署到公开 URL 时
- 发布网站或 Web 应用时
- 当用户说“部署这个”、“使其上线”或“给我一个 URL”时
- 更新已部署的应用时
设置(仅限首次)
1. 检查是否存在 API 密钥:
- 在项目根目录下查找 .appdeploy 文件
- 如果该文件存在且包含有效的 api_key,请直接跳至“使用”部分
2. 如果不存在 API 密钥,请注册并获取:
curl -X POST https://api-v2.appdeploy.ai/mcp/api-key \
-H "Content-Type: application/json" \
-d '{"client_name": "claude-code"}'响应:
{
"api_key": "ak_...",
"user_id": "agent-claude-code-a1b2c3d4",
"created_at": 1234567890,
"message": "Save this key securely - it cannot be retrieved later"
}3. 将凭据保存到 .appdeploy:
{
"api_key": "ak_...",
"endpoint": "https://api-v2.appdeploy.ai/mcp"
}如果尚未添加,请将 .appdeploy 添加到 .gitignore 中。
使用
向 MCP 端点发送 JSON-RPC 调用:
curl -X POST {endpoint} \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer {api_key}" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "{tool_name}",
"arguments": { ... }
}
}'工作流
1. 首先,获取部署指令:
调用 get_deploy_instructions 以了解限制条件和要求。
2. 获取应用模板:
调用 get_app_template 并指定所选的 app_type 和 frontend_template。
3. 部署应用:
调用 deploy_app 并提供应用文件。对于新应用,将 app_id 设置为 null。
4. 检查部署状态:
调用 get_app_status 检查构建是否成功。
5. 查看/管理应用:
使用 get_apps 列出已部署的应用。
可用工具
get_deploy_instructions
在调用 deploy_app 之前使用此工具,以获取部署限制和硬性规则。在开始生成任何代码之前,必须调用此工具。该工具仅返回指令,不执行任何部署操作。
参数:
(无)
deploy_app
当用户要求部署或发布网站/Web 应用并需要公开 URL 时使用。
在生成文件或调用此工具之前,必须先调用 get_deploy_instructions 并遵循其约束。
参数:
- app_id: any (必填) - 要更新的现有应用 ID,或新应用设为 null
- app_type: string (必填) - 应用架构:仅前端 (frontend-only) 或 前端+后端 (frontend+backend)
- app_name: string (必填) - 简短的显示名称
- description: string (可选) - 应用功能的简短描述
- frontend_template: any (可选) - 当 app_id 为 null 时必填。可选值:'html-static' (简单站点), 'react-vite' (SPA, 游戏), 'nextjs-static' (多页面)。模板文件将自动包含。
- files: array (可选) - 要写入的文件。新应用:仅限自定义文件 + 对模板文件的差异更新。更新应用:仅限更改的部分。
使用 diffs[] 更新文件。files[] 或 deletePaths[] 至少需要提供其中之一。
- deletePaths: 数组(可选)- 要删除的路径。仅用于更新(需提供 app_id)。不能删除 package.json 或框架入口文件。
- model: 字符串(必填)- 本次部署所使用的编码代理模型(尽你所知)。示例:'codex-5.3', 'chatgpt', 'opus 4.6', 'claude-sonnet-4-5', 'gemini-2.5-pro'
- intent: 字符串(必填)- 本次部署的意图。用户发起示例:'initial app deploy'(初始应用部署), 'bugfix - ui is too noisy'(修复 bug - UI 过于嘈杂)。代理发起示例:'agent fixing deployment error'(代理修复部署错误), 'agent retry after lint failure'(Lint 失败后代理重试)
get_app_template
请先调用 get_deploy_instructions。在你确定了 app_type 和 frontend_template 后调用此接口。返回基础应用模板和 SDK 类型。模板文件会自动包含在 deploy_app 中。
参数:
- app_type: 字符串(必填)
- frontend_template: 字符串(必填)- 前端框架:'html-static' - 简单站点,极简框架;'react-vite' - React SPA、仪表盘、游戏;'nextjs-static' - 多页面应用,SSG
get_app_status
在 deploy_app 工具调用返回时,或当用户要求检查应用部署状态、报告应用有错或运行不符合预期时使用。返回部署状态(进行中:'deploying'/'deleting',终态:'ready'/'failed'/'deleted')、QA 快照(前端/网络错误)以及实时前后端错误日志。
参数:
- app_id: 字符串(必填)- 目标应用 ID
- since: 整数(可选)- 可选的毫秒级 Unix 时间戳,用于过滤错误。提供后仅返回该时间戳之后的错误。
delete_app
当你想要永久删除应用时使用。仅在用户明确要求时使用。此操作不可逆;删除后,状态检查将返回未找到。
参数:
- app_id: 字符串(必填)- 目标应用 ID
get_app_versions
列出现有应用的可部署版本。需要 app_id。按时间倒序返回 {name, version, timestamp} 列表。向用户展示 'name',不要向用户展示 'version' 值。时间戳必须转换为用户的本地时间。
参数:
- app_id: 字符串(必填)- 目标应用 ID
apply_app_version
开始部署现有应用的特定版本。请使用 get_app_versions 返回的 'version' 值(而非 'name')。如果接受请求并开始部署,则返回 true;请使用 get_app_status 观察是否完成。
参数:
- app_id: 字符串(必填)- 目标应用 ID
- version: 字符串(必填)- 要应用的版本 ID
src_glob
当你需要发现应用源码快照中的文件时使用。返回匹配 glob 模式的文件路径(不含内容)。适用于在读取或搜索文件前探索项目结构。
参数:
- app_id: 字符串(必填)- 目标应用 ID
- version: 字符串(可选)- 要检查的版本(默认为当前应用版本)
- path: 字符串(可选)- 要搜索的目录路径
- glob: 字符串(可选)- 匹配文件的 glob 模式(默认:**/*)
- include_dirs: 布尔值(可选)- 结果中是否包含目录路径
- continuation_token: 字符串(可选)- 用于分页的上一次响应令牌
src_grep
当你需要在应用源代码中搜索模式时使用。返回匹配的行及可选的上下文。支持正则模式、glob 过滤器和多种输出模式。
参数:
- app_id: string (必填) - 目标应用 ID
- version: string (可选) - 要搜索的版本(默认为已部署版本)
- pattern: string (必填) - 要搜索的正则表达式(最多 500 字符)
- path: string (可选) - 要搜索的目录路径
- glob: string (可选) - 用于过滤文件的 Glob 模式(例如 '*.ts')
- case_insensitive: boolean (可选) - 启用不区分大小写匹配
- output_mode: string (可选) - content=匹配行, files_with_matches=仅文件路径, count=每个文件的匹配数
- before_context: integer (可选) - 每个匹配项前显示的行数 (0-20)
- after_context: integer (可选) - 每个匹配项后显示的行数 (0-20)
- context: integer (可选) - 前后显示的行数(覆盖 before/after_context)
- line_numbers: boolean (可选) - 在输出中包含行号
- max_file_size: integer (可选) - 扫描文件的最大字节数(默认 10MB)
- continuation_token: string (可选) - 用于分页的上一次响应令牌
src_read
当你需要读取应用源码快照中的特定文件时使用。返回基于行分页(offset/limit)的文件内容。支持文本和二进制文件。
参数:
- app_id: string (必填) - 目标应用 ID
- version: string (可选) - 要读取的版本(默认为已部署版本)
- file_path: string (必填) - 要读取的文件路径
- offset: integer (可选) - 开始读取的行偏移量(从 0 开始)
- limit: integer (可选) - 返回的行数(最多 2000 行)
get_apps
当你需要列出当前用户拥有的应用时使用。返回应用详情,包含用于用户展示的显示字段和用于工具链调用的数据字段。
参数:
- continuation_token: string (可选) - 用于分页的令牌
---
*由 scripts/generate-appdeploy-skill.ts 生成*
局限性
- 仅在任务明确符合上述范围时使用此技能。
- 不要将输出视为特定环境验证、测试或专家评审的替代方案。
- 如果缺少必要的输入、权限、安全边界或成功标准,请停止并请求澄清。