with one click
deploy-website
// 部署并本地预览 Web 项目。自动检测项目类型(Node.js、PHP、Python/Django/Flask/Gunicorn、Go、Ruby/Rails、Java/Spring Boot、Rust 或静态 HTML),启动对应的开发服务器。
// 部署并本地预览 Web 项目。自动检测项目类型(Node.js、PHP、Python/Django/Flask/Gunicorn、Go、Ruby/Rails、Java/Spring Boot、Rust 或静态 HTML),启动对应的开发服务器。
| name | deploy-website |
| description | 部署并本地预览 Web 项目。自动检测项目类型(Node.js、PHP、Python/Django/Flask/Gunicorn、Go、Ruby/Rails、Java/Spring Boot、Rust 或静态 HTML),启动对应的开发服务器。 |
| arguments | [{"name":"workspace","description":"要部署的工作区目录的绝对路径","required":false}] |
自动检测项目类型,使用 background_terminal_create 在后台启动 对应的开发服务器,确认启动成功后通过 MCP 工具 request_preview 获取预览地址。
Node.js Web 项目
package.jsondev 或 start 脚本npm run dev(若无 dev 则执行 npm start)静态网站
.html 文件(尤其是 index.html)python3 -m http.server 8000 提供静态文件服务其他类型网站
根据项目特征文件检测类型并使用对应服务器:
.php 文件或 composer.json
php -S localhost:8000public/index.php,则从 public 目录提供服务manage.py 和 settings.py
python manage.py runserver 8000app.py 或 wsgi.py
python app.py 或 flask run --port=8000gunicorn.conf.py 或 uwsgi.ini
gunicorn -b 0.0.0.0:8000 app:app(根据实际模块名调整)requirements.txt 或 pyproject.toml
python -m http.server 8000go.mod
go run main.go 或 go run .rails 的 Gemfile
rails server -p 8000 或 bundle exec rails server -p 8000pom.xml(Maven)或 build.gradle(Gradle)
mvn spring-boot:run 或 ./gradlew bootRunCargo.toml
cargo runREADME.md、README.rst、README.txt、doc/README.md)run、start、serve、dev、preview 等关键词的命令启动新服务器之前,先进行以下检查:
background_terminal_list 检查是否已有运行中的后台终端ss -tlnp 2>/dev/null || netstat -tlnp 2>/dev/null || lsof -iTCP -sTCP:LISTEN -P -n
若检测到已有服务器进程:
request_preview在使用默认检测逻辑之前,必须先查阅项目文档,确认项目是否有明确指定的启动方式。按以下顺序读取文档:
.monkeycode/MEMORY.md - 项目记忆文件,可能包含之前记录的启动方式README.md - 项目说明文档,通常包含开发服务器启动命令AGENTS.md - Agent 指令文件,可能包含针对 AI 助手的启动指引查找目标:在上述文档中搜索与 Web 服务启动相关的内容,例如:
npm run dev、make serve、docker compose up 等)判断逻辑:
background_terminal_create 启动服务器仅在未检测到已有服务器、且项目文档中未找到明确启动指示时,执行此步骤的默认检测逻辑。
重要:必须使用 MCP 工具
background_terminal_create启动服务器。该工具在后台终端中运行命令,不会阻塞当前会话,并提供输出日志追踪。
根据项目类型调用 background_terminal_create 执行对应命令:
Node.js 项目(存在 package.json):
npm install 确保依赖已安装background_terminal_create 执行 npm run dev(或 npm start)PHP 项目(存在 composer.json 或 .php 文件):
background_terminal_create 执行 php -S localhost:8000public/index.php,则执行 php -S localhost:8000 -t publicPython/Django(存在 manage.py):
background_terminal_create 执行 python manage.py runserver 8000Python/Flask(存在 app.py 或 wsgi.py):
background_terminal_create 执行 flask run --port=8000 或 python app.pyPython/Gunicorn(存在 gunicorn.conf.py 或 uwsgi.ini):
background_terminal_create 执行 gunicorn -b 0.0.0.0:8000 app:appPython 通用(存在 requirements.txt 或 pyproject.toml):
background_terminal_create 执行 python -m http.server 8000Go 项目(存在 go.mod):
background_terminal_create 执行 go run . 或 go run main.goRuby/Rails(Gemfile 中包含 rails):
background_terminal_create 执行 bundle exec rails server -p 8000Java/Spring Boot(存在 pom.xml 或 build.gradle):
background_terminal_create 执行 ./mvnw spring-boot:run 或 ./gradlew bootRunRust 项目(存在 Cargo.toml):
background_terminal_create 执行 cargo run静态 HTML 文件(存在 index.html 或其他 .html 文件):
background_terminal_create 执行 python3 -m http.server 8000基于 README 检测(以上均未匹配时):
background_terminal_create 执行background_terminal_create 返回的结果中包含子进程的 ID(PID),记录该 PID 以便后续管理。
然后通过以下步骤确认服务器已成功启动:
# 第 1 步:调用 background_terminal_output_path 获取日志文件路径
# 第 2 步:使用 Read 工具读取日志文件
# 第 3 步:查找启动成功的标志,例如:
# - "Listening on port ..."
# - "Server running at ..."
# - "ready in ... ms"
# - "Local: http://localhost:..."
# 第 4 步:若启动失败,读取日志中的错误信息并排查问题
若日志显示服务器尚未启动完成,等待几秒后重新读取日志文件,重复此过程直到确认服务器已运行或检测到错误。
调用 MCP 工具 request_preview,传入服务器监听的端口号,获取预览 URL。
调用 request_preview 获得 access_url 后,必须检测预览连接是否正常。使用 curl 请求预览服务的健康检查端点:
curl -s --max-time 10 "$ACCESS_URL/.well-known/mcai-preview-connect-status-detect" | head -n10
检测逻辑:
<meta name="mcai-preview-error"mcai-preview-connect-status-detect 是一个 dummy 地址,后端一定不存在这个文件,这个请求只是为了判断前置代理是否有返回报错。所以只要响应中不包含上述 meta,就说明预览连接正常,无需关注响应中的其他错误,请直接跳过下面排查步骤,继续向用户展示预览地址mcai-preview-error 这个 meta,说明云端的预览服务无法访问本地站点。需要从 meta 标签的属性中提取错误信息:
code — 错误状态码content — 错误原因描述data-request-id — 请求 IDmeta 标签格式:
<meta name="mcai-preview-error" code="530" content="开发环境端口 9091 连接失败,请检查 Web 站点进程是否已经退出,以及该端口是否有在监听。" data-request-id="RL-xxxxxxxx"/>
异常排查流程:
根据提取到的 code (错误码) 和 content (异常原因),
request_preview 返回的预览地址request_preview,使用 additional_ip_whitelist 字段添加用户的 IPadditional_ip_whitelist 字段接受多个 IPv4 地址,以逗号分隔(例如 "192.168.1.100,10.0.0.50")严禁使用 exec 工具直接启动服务器进程,必须使用后台终端来启动。
使用 background_terminal_list 查看所有运行中的后台终端及其状态。
使用 background_terminal_output_path 获取后台终端的日志文件路径,然后读取日志文件查看服务器输出、错误或运行状态。
当用户请求停止服务器时,使用 background_terminal_kill 并传入终端 ID 来停止。
严禁使用 pkill 或 killall 加进程名的方式停止服务器(例如 pkill node、killall python),这可能导致:
始终使用 background_terminal_kill 停止由本 skill 启动的服务器。
background_terminal_create 启动服务器,确保不阻塞当前会话background_terminal_output_path 获取日志路径并读取日志,确认服务器已运行后再获取预览地址background_terminal_list 追踪运行中的终端,使用 background_terminal_kill 停止终端pkill 或 killall 停止服务器,必须使用 background_terminal_kill 加终端 IDnpm installpip install -r requirements.txt(若存在)composer install(若存在 composer.json)bundle install(若存在 Gemfile)go mod download(go run 会自动处理)cargo fetch(cargo run 会自动处理)