Tài liệu cho AI agent

Hướng dẫn MONA Cloud cho AI agent

MONA Cloud compute (trước đây VibeCloud) giúp AI agent tạo VPS, database và triển khai ứng dụng qua API. MONA làm phần mềm và hạ tầng từ 2016, qua 14.000+ dự án.

Tài liệu này dành cho Claude, Codex, Cursor và agent dùng Model Context Protocol (MCP). Mục tiêu là thử toàn bộ luồng bằng sandbox miễn phí trước khi tạo tài nguyên tính phí.

Phiên bản và số đo

  • MCP monacloud-mcp0.5.0
  • CLI monacloud0.4.1
  • MCP deploy thư mục local khi host đã có33 giây
  • Upload API tới URL HTTPS, gồm build image112 giây

Số đo 05/09/2026 (tối) với repo mẫu; không phải cam kết thời gian build cho mọi dự án.

Cài đặt

Cài MONA Cloud MCP qua đúng cửa AI bạn đang dùng

MCP monacloud-mcp 0.5.0 và CLI monacloud 0.4.1 đã LIVE. Các tool compute dùng namespace cloud_*.

Claude Code. Chạy trong terminal.

Claude Code
claude mcp add --transport http monacloud https://mcp.monacloud.vn/mcp

Claude.ai (người bấm). Vào Settings → Connectors → Add custom connector, điền thông tin rồi đăng nhập MONA Pass.

Claude.ai
Name: MONA Cloud
URL: https://mcp.monacloud.vn/mcp

Codex. Thêm vào ~/.codex/config.toml.

Codex
[mcp_servers.monacloud]
url = "https://mcp.monacloud.vn/mcp"

Gemini (Antigravity). Chạy trong terminal; cấu hình lưu tại ~/.gemini/config/mcp_config.json. Kiểm tra bằng agy mcp list.

Gemini (Antigravity)
agy mcp add monacloud https://mcp.monacloud.vn/mcp

Cursor. Thêm vào .cursor/mcp.json.

Cursor
{ "mcpServers": { "monacloud": { "url": "https://mcp.monacloud.vn/mcp" } } }
Giao thẳng cho AI tự cài
Cài MCP MONA Cloud giúp tôi rồi kiểm tra chạy được chưa. Nếu bạn là Claude Code: chạy `claude mcp add --transport http monacloud https://mcp.monacloud.vn/mcp`. Nếu là Codex: thêm `[mcp_servers.monacloud]` với `url = "https://mcp.monacloud.vn/mcp"` vào `~/.codex/config.toml`. Nếu là Gemini/Antigravity: chạy `agy mcp add monacloud https://mcp.monacloud.vn/mcp`. Cài xong gọi thử `cloud_domain_search` với tên tôi muốn mua rồi báo giá cho tôi.
ToolCông dụng
cloud_linkKiểm tra hoặc thiết lập liên kết MONA Pass
cloud_prices, cloud_packagesĐọc đơn giá và các gói cấu hình
cloud_vps_createTạo VPS và trả job để theo dõi
cloud_db_createTạo database và trả job để theo dõi
cloud_job_statusĐọc hoặc poll job tới trạng thái cuối
cloud_services_listLiệt kê VPS và database
cloud_service_start, cloud_service_stop, cloud_service_rebuildVận hành service
cloud_agent_deployRuntime agent riêng; deploy repo dùng cloud_app_create
cloud_app_detectĐoán stack/port/Dockerfile từ local_dir, offline
cloud_app_createNhận local_dir để tự đóng zip/upload, hoặc repo_url cho git public
cloud_app_list, cloud_app_getLiệt kê và đọc app
cloud_app_deploy, cloud_app_env_setDeploy lại; thay toàn bộ env và deploy để áp dụng
cloud_app_domain_add, cloud_app_logs, cloud_app_deleteThêm domain, đọc log, xoá app
cloud_app_host_list, cloud_plan_listĐọc host và gói tháng/năm
cloud_subscription_list, cloud_subscription_updateĐọc và đổi subscription
cloud_invoice_list, cloud_invoice_pdfDanh sách và file hoá đơn
cloud_credit_redeemĐổi mã credit người dùng cung cấp

Các alias cũ vibecloud_* vẫn chạy để giữ tương thích, nhưng tích hợp mới phải dùng tên cloud_* ở trên.

Token

Token nào dùng ở đâu?

Agent hay nhầm token ở chỗ này, nên bảng dưới ghi rõ từng việc dùng token nào.

ViệcTokenBiến môi trườngGhi chú
Gọi API compute https://api.monacloud.vn (VPS, database, app từ git hoặc upload, gói tháng, hoá đơn, mã credit)vc_live_* tạo ở console, mục API keys, hoặc JWT MONA Pass lấy bằng monacloud-mcp loginMONACLOUD_TOKENGửi Authorization: Bearer <token>. Cả hai loại đều dùng được cho mọi endpoint /api/*.
Ví chung https://billing.monacloud.vn/v1/balancechỉ JWT MONA PassMONA_PASS_TOKENToken vc_live_* bị 401 ở đây. Tài khoản đang dùng ví local đọc số dư bằng GET /api/me (trả {user: {credit_vnd, promo_credit_vnd, total_credit_vnd}}).
Console webphiên đăng nhập (MONA Pass hoặc email)không cầnChỉ người dùng bấm.

Khách đã đăng ký và đưa sẵn token thì agent không cần đăng nhập gì thêm: đặt MONACLOUD_TOKEN, gọi GET /api/me để xác nhận, rồi làm việc bằng REST hoặc MCP. Không in token ra log, không ghi vào mã nguồn.

Lệnh đầu tiên

Bắt đầu bằng các lệnh nào?

Đặt token, xác nhận tài khoản, đọc OpenAPI
export MONACLOUD_TOKEN=vc_live_...        # khách đưa, hoặc lấy từ console → API keys
curl -s https://api.monacloud.vn/api/me -H "Authorization: Bearer $MONACLOUD_TOKEN"
curl -s https://api.monacloud.vn/openapi.json | head -c 400   # đọc hợp đồng thật trước khi gọi

Có Node thì chạy npx -y monacloud deploy để đưa thư mục hiện tại lên web, không cần GitHub. CLI monacloud 0.4.1 tự tải MCP qua npx; đặt MONACLOUD_TOKEN là chạy. Thêm --git để dùng remote hiện tại, --repo <url> để chỉ định repo public hoặc --sandbox để thử miễn phí. Không có Node, dùng hai request upload REST ở mục deploy local bên dưới.

Đăng nhập

Đăng nhập MONA Pass không gửi mật khẩu vào chat

Đăng nhập MONA Pass cho MCP
npx -y monacloud-mcp login

Đăng nhập một lần bằng MONA Pass. MCP lưu token cục bộ và dùng cùng phiên đăng nhập cho nhóm sản phẩm MONA Cloud; không yêu cầu người dùng gửi username, password hoặc token vào chat. MONA Cloud nhận trực tiếp JWT có audience vibecloud.

Với curl, đặt access token MONA Pass vào biến môi trường của phiên shell, không ghi vào source hoặc log:

Biến môi trường cho curl
export MONACLOUD_API="https://api.monacloud.vn"
export MONA_PASS_TOKEN="<access-token>"

https://api.vibecloud.vn là alias tương thích của API và được giữ trong 12 tháng, đến hết ngày 04/09/2027. Tích hợp mới phải dùng https://api.monacloud.vn.

Chuỗi thử sandbox

Chuỗi thử từng bước trong sandbox

Các lệnh tạo tài nguyên dưới đây dùng prefix /api/sandbox. Có thể gọi route /api/... tương ứng với header X-Vibecloud-Sandbox: 1 để nhận cùng hành vi.

1. Đọc bảng giá

Với MCP, gọi cloud_prices hoặc cloud_packages.

Đọc bảng giá
curl -sS "$MONACLOUD_API/api/prices"

2. Tạo VPS sandbox

Với MCP, gọi cloud_vps_create sau khi đã xác nhận cấu hình và chi phí.

Tạo VPS trong sandbox
curl -sS -X POST "$MONACLOUD_API/api/sandbox/lxc" \
  -H "Authorization: Bearer $MONA_PASS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"app_name":"agent-demo","cpu":1,"ram_gb":1,"disk_gb":10}'

Lưu trường id thành VPS_JOB_ID. Response luôn có sandbox: true và IP giả thuộc dải 10.99.x.x.

3. Poll job tới done

Với MCP, gọi cloud_job_status với job_id vừa nhận.

Theo dõi job tạo VPS
export VPS_JOB_ID="<id-tu-buoc-2>"
curl -sS "$MONACLOUD_API/api/jobs/$VPS_JOB_ID" \
  -H "Authorization: Bearer $MONA_PASS_TOKEN"

Lookup theo ID tự tìm trong kho sandbox nếu không có bản ghi thật, nên poll GET /api/jobs/{id} không cần gửi lại header sandbox. Job sandbox chuyển queued, rồi running, rồi done sau vài giây. Chỉ đọc result khi trạng thái là done; job tính phí dùng trạng thái hoàn tất succeeded.

4. Tạo database sandbox

Với MCP, gọi cloud_db_create, sau đó theo dõi bằng cloud_job_status.

Tạo database PostgreSQL trong sandbox
curl -sS -X POST "$MONACLOUD_API/api/sandbox/databases" \
  -H "Authorization: Bearer $MONA_PASS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"app_name":"agent-demo-db","engine":"postgresql","cpu":1,"ram_gb":1,"disk_gb":10}'

Poll id của response qua /api/jobs/{id} như bước 3. Credential, connection string và IP trong sandbox chỉ là dữ liệu giả để kiểm tra tích hợp.

engine nhận mongodb, postgresql, mysql; alias cũ mongo được chuẩn hoá thành mongodb. Với route tính phí, backend kiểm tra template đã resolve trên Proxmox trước khi nhận job (inventory cache 10 phút). PostgreSQL/MySQL mặc định dùng template Ubuntu từ PROXMOX_LXC_TEMPLATE rồi cài engine lúc provision; nếu operator cấu hình template riêng thì backend dùng đường nhanh đó.

Khi template chưa có, API trả thẳng HTTP 409 (không tạo job):

Phản hồi 409 engine_not_available
{
  "code": "engine_not_available",
  "message": "Engine được yêu cầu tạm không khả dụng; chọn engine trong phản hồi API",
  "next_step": "Chọn engine đang khả dụng hoặc thử lại sau khi template đã được cài trên node Proxmox."
}

Route sandbox không kiểm tra inventory Proxmox. Job tính phí công bố stages[]; mỗi stage có status là running, succeeded hoặc failed, cùng started_at, completed_at và duration_seconds để agent theo dõi thời gian provision.

Connection string khi thành công:

  • PostgreSQL: postgresql://user:password@host:5432/database?sslmode=require
  • MySQL: mysql://user:password@host:3306/database (server bắt buộc TLS)
  • MongoDB: mongodb://user:password@host:27017/database?authSource=database&tls=true

5. Lấy credential rồi deploy

Backend MONA Cloud provision hạ tầng; agent deploy source qua SSH sau khi job hoàn tất. Lấy service_id trong result, đọc service trước, rồi gọi endpoint reveal riêng khi thực sự cần SSH. Service detail và job result không trả private key hay root password.

Với MCP, dùng cloud_services_list để lấy danh sách tài nguyên hiện tại.

Đọc service rồi reveal credential
export VPS_SERVICE_ID="<service_id-trong-result>"
curl -sS "$MONACLOUD_API/api/services/$VPS_SERVICE_ID" \
  -H "Authorization: Bearer $MONA_PASS_TOKEN"

curl -sS "$MONACLOUD_API/api/services/$VPS_SERVICE_ID/credentials" \
  -H "Authorization: Bearer $MONA_PASS_TOKEN" \
  -H "X-Confirm: reveal"

Endpoint reveal được audit và giới hạn 5 lần/giờ/token. Với service tính phí, dùng credential vừa reveal để rsync source, cài dependency, đưa secret database vào biến môi trường, chạy migration và kiểm tra health URL. Không thử SSH vào IP 10.99.x.x; đó là IP giả của sandbox.

6. Dừng service

Với MCP, gọi cloud_service_stop.

Dừng service
curl -sS -X POST "$MONACLOUD_API/api/services/$VPS_SERVICE_ID/stop" \
  -H "Authorization: Bearer $MONA_PASS_TOKEN"

Sandbox

Sandbox giúp agent thử không tốn tiền

Sandbox không gọi Proxmox, không cấp IP thật và không trừ tiền.

Service và job được lưu tách bằng sandbox: true; dashboard trả chúng trong nhóm sandbox, không trộn với service tính phí. MongoDB tự dọn dữ liệu khi hết TTL, mặc định 24 giờ.

Sau khi tạo sandbox, các endpoint theo ID GET /api/jobs/{id}, GET /api/services/{id}, POST /api/services/{id}/start|stop|rebuild và DELETE /api/services/{id} tự fallback sang kho sandbox, không cần header. Response sandbox vẫn luôn có sandbox: true.

Endpoint danh sách vẫn tách biệt: không header chỉ trả tài nguyên tính phí, có header chỉ trả sandbox. Thêm ?include_sandbox=1 vào GET /api/jobs hoặc GET /api/services để gộp cả hai.

Dùng một trong hai cách:

  • Prefix: /api/sandbox/lxc, /api/sandbox/databases, /api/sandbox/jobs/{id}, /api/sandbox/services*.
  • Header: thêm X-Vibecloud-Sandbox: 1 khi tạo qua /api/lxc, /api/databases, hoặc khi muốn list riêng sandbox qua /api/jobs, /api/services.

API

Bảng endpoint cho VPS, database, job và service

NhómMethod và endpointCông dụng
DiscoveryGET /healthTrạng thái, phiên bản và thời gian API; không cần đăng nhập
DiscoveryGET /openapi.json, GET /docsOpenAPI và Swagger công khai
GiáGET /api/prices, GET /api/packagesĐọc đơn giá và gói tài nguyên
VPSPOST /api/lxcTạo job provision LXC tính phí
DatabasePOST /api/databasesTạo job provision database tính phí
JobGET /api/jobs/{id}Poll job tính phí hoặc sandbox theo ID
ServiceGET /api/services, GET /api/services/{id}List mặc định trả service tính phí; lookup ID tự fallback sandbox
CredentialGET /api/services/{id}/credentials + X-Confirm: revealReveal credential có audit, tối đa 5 lần/giờ
Vận hànhPOST /api/services/{id}/startKhởi động service
Vận hànhPOST /api/services/{id}/stopDừng compute của service
Vận hànhPOST /api/services/{id}/rebuildTạo job rebuild LXC
Vận hànhDELETE /api/services/{id}Xoá service và ngừng vòng đời tính phí
Sandbox/api/sandbox/...Cùng luồng agent nhưng không tạo hạ tầng và không tốn tiền

Xử lý lỗi

Mã lỗi API và cách agent xử lý

HTTPCode/nguyên nhânAgent cần làm
401Token thiếu, hết hạn hoặc JWT sai issuer/audienceChạy lại npx -y monacloud-mcp login; không retry token cũ vô hạn
402insufficient_fundsYêu cầu người dùng nạp tiền tại https://monacloud.vn/console, kiểm tra số dư rồi gọi lại
402budget_exceededYêu cầu người dùng tăng budget tại https://monacloud.vn/console; không tự bỏ giới hạn
404Job/service/package không tồn tại hoặc không thuộc userKiểm tra lại ID và tài khoản đang đăng nhập
409engine_not_available ở body cấp cao nhấtChọn engine được liệt kê trong message; không poll vì chưa có job
409Sai trạng thái, vượt quota hoặc thao tác xung đột khácĐọc detail, poll job hiện tại hoặc gửi quota request
422Payload sai schemaĐọc /openapi.json, sửa field rồi mới retry
5xxLỗi hạ tầng tạm thờiGiữ request context, retry có giới hạn; không tạo trùng service

Lưu ý

Điều agent hay hiểu sai

  • stop chỉ dừng compute. Disk và IP của service tính phí vẫn được giữ và tiếp tục tính phí; phải DELETE /api/services/{id} mới ngừng toàn bộ phí.
  • Provision và rebuild là job bất đồng bộ. Nhận job_id chưa có nghĩa là xong; phải poll tới succeeded với job tính phí hoặc done với sandbox.
  • IP, credential và connection string sandbox đều là giả. Không báo với người dùng rằng ứng dụng đã online sau một job sandbox.
  • Custom domain dạng subdomain nên dùng CNAME trỏ vào hostname được cấp. Không đặt CNAME trực tiếp vào địa chỉ IP; apex domain cần A/ALIAS phù hợp nhà cung cấp DNS.
  • Không gửi đồng thời package_slug và bộ cpu/ram_gb/disk_gb.
  • Không đưa token, private key hoặc password database vào commit, issue hay output công khai.

Tài liệu

Bản đồ tài liệu cho agent

  • OpenAPI máy đọc: https://api.monacloud.vn/openapi.json
  • Swagger: https://api.monacloud.vn/docs
  • Tài liệu agent raw: https://monacloud.vn/ai-agent
  • Hướng dẫn API đầy đủ: https://api.monacloud.vn/api/guide
  • Mục lục cho LLM: https://monacloud.vn/llms.txt
  • Ngữ cảnh đầy đủ cho LLM: https://monacloud.vn/llms-full.txt

Trước khi tạo tài nguyên tính phí, agent phải đọc giá, xác nhận cấu hình, chạy luồng sandbox và chỉ chuyển sang route tính phí khi người dùng yêu cầu rõ ràng.

Prompt

Prompt mẫu cho AI

AI kiểm tra giá và ví, thử sandbox, báo chi phí VND rồi chờ bạn đồng ý.

Prompt không chứa secret.

Prompt đọc hướng dẫn và thử sandbox
Đọc hướng dẫn này, kiểm tra giá và ví trước khi thao tác. Thử sandbox, xác minh sandbox: true và poll tới done. Báo cấu hình cùng chi phí VND, chỉ tạo tài nguyên tính phí sau khi tôi đồng ý với báo giá. Không đưa token hoặc credential vào chat.

Deploy từ git

Deploy app từ git đã LIVE

Repo public deploy được bằng MCP, CLI hoặc API. Chọn một công cụ tạo app để không tạo trùng.

1. Đăng nhập, đọc dự án và thử bằng MCP

Đăng nhập MONA Pass bằng npx -y monacloud-mcp login. Dùng MCP monacloud-mcp 0.5.0 và CLI monacloud 0.4.1. Giao prompt sau cho AI:

Prompt deploy repo · không chứa secret
Đọc repo của tôi. Gọi cloud_app_list và cloud_app_host_list để tránh tạo trùng, cloud_prices, cloud_plan_list và cloud_balance để tính phí. Nếu chưa có host, gọi cloud_app_create với repo_url, branch, build_type, port đúng dự án và sandbox=true. Báo ước tính để tôi đồng ý. Sau khi tôi đồng ý, gọi cloud_app_create với sandbox=false, poll bằng cloud_job_status, kiểm cloud_app_get/cloud_app_logs và HTTPS rồi trả URL.

2. Deploy bằng CLI thế nào?

CLI dùng npx -y monacloud deploy --repo <url>. Ví dụ dưới đây dùng repo Node.js mẫu có Dockerfile; thay URL, nhánh, kiểu build và cổng theo dự án của bạn:

Thử miễn phí, rồi deploy repo mẫu
npx -y monacloud deploy --repo https://github.com/themonagroup/monacloud-example-node --branch main --build dockerfile --sandbox
npx -y monacloud deploy --repo https://github.com/themonagroup/monacloud-example-node --branch main --build dockerfile

Lần đầu chạy thử miễn phí; lệnh thứ hai hiển thị ước tính và hỏi bạn đồng ý trước khi tạo tài nguyên tính phí. --build nhận dockerfile, nixpacks hoặc static. Với repo hiện tại có remote và nhánh, chạy npx -y monacloud deploy --git. Không có cờ nguồn, CLI deploy thư mục hiện tại. Chọn một công cụ tạo app: nếu AI đã deploy ở bước 1 thì dùng ID đó để kiểm tra, không tạo lại bằng CLI.

3. Gọi API và đọc kết quả thế nào?

Nếu dùng curl thay cho MCP/CLI, đặt token theo bắt đầu nhanh và thử POST /api/apps:

Tạo app từ git trong sandbox
curl -sS -X POST "$MONACLOUD_API/api/apps" \
  -H "Authorization: Bearer $MONACLOUD_TOKEN" \
  -H "X-Vibecloud-Sandbox: 1" \
  -H "Content-Type: application/json" \
  -d '{"repo_url":"https://github.com/themonagroup/monacloud-example-node","branch":"main","build_type":"dockerfile","dockerfile":"Dockerfile","port":3000}'

Sau khi bạn đồng ý với báo giá, bỏ header X-Vibecloud-Sandbox: 1 để tạo app tính phí. API trả job có id; thay JOB_ID bằng ID nhận được và đọc tới trạng thái cuối:

Theo dõi job tạo app
export JOB_ID="<job-id-tra-ve>"
curl -sS "$MONACLOUD_API/api/jobs/$JOB_ID" \
  -H "Authorization: Bearer $MONACLOUD_TOKEN"

Lấy result.app_id, đọc GET /api/apps/{app_id} để kiểm tra status, url, last_deploy và errorMessage. Khi timeout, đọc lại job cũ trước; không gửi create lặp. Quản lý app tại console /apps.

Kết quả mong đợi khi deploy git là gì?

Số đo 05/09/2026: app từ git đã LIVE. Repo git public đi vào app host riêng của user (LXC + Dokploy, tạo lần đầu ~150 giây), deploy mất 10–20 giây, rồi nhận URL https://<repo>-<mã>.app.monacloud.vn có cert Let's Encrypt.

Ví dụ: https://monacloud-example-node-3fb5b2.app.monacloud.vn, từ repo mẫu Node.js. Xoá app rồi tạo lại: 31 giây khi đã có app host. Đây là số đo của repo mẫu; thời gian build dự án của bạn phụ thuộc source, dependency và tài nguyên.

Job tính phí kết thúc ở succeeded; trạng thái app là done. Sandbox kết thúc ở done, có sandbox: true và URL giả; không có website chạy được. Kiểm tra HTTPS và chức năng app trước khi chuyển traffic.

EndpointCông dụng
POST /api/apps · GET /api/appsTạo từ git hoặc source: "upload", liệt kê app
POST /api/apps/{id}/uploadGửi multipart archive zip/tar.gz ≤ 80 MB và build_path
GET /api/apps/{app_id}Đọc URL, trạng thái, lần deploy
POST /api/apps/{app_id}/deployDeploy lại nhánh đã chọn
PUT /api/apps/{app_id}/envThay toàn bộ env; deploy lại để áp dụng
POST /api/apps/{app_id}/domainsThêm domain, trả hướng dẫn CNAME
GET /api/apps/{app_id}/logs · DELETE /api/apps/{app_id}Log hoặc xoá app; xoá vẫn giữ host
GET /api/app-hosts · POST /api/app-hostsLiệt kê/tạo app host riêng
GET /api/plansGói, cấu hình và giá tháng/năm
GET /api/subscriptionsGói đang dùng và kỳ gia hạn
POST /api/services/{service_id}/subscriptionĐổi gói/kỳ hoặc tắt gia hạn
GET /api/invoices · GET /api/invoices/{invoice_id}.pdfHoá đơn VAT 10% mỗi tháng và file tải
POST /api/credit-codes/redeemĐổi mã credit

Gói tháng 399.000đ, 999.000đ, 1.990.000đ và 3.990.000đ mỗi tháng, trả năm bằng giá 10 tháng; khách MONA có gói miễn phí, credit đăng ký 100.000đ. App host tính như VPS, app không tính thêm. Repo private đang mở qua GitHub App.

POST /api/app-hosts với {} tạo host mặc định 2 CPU/2 GB RAM/30 GB disk; route này không nhận sandbox. Dùng POST /api/apps với X-Vibecloud-Sandbox: 1 để mô phỏng host và xem ước tính, không tính phí. Khi dùng gói tháng, tạo host với billing_mode, plan_code, period, rồi truyền app_host_id vào app create.

Xem triển khai repo mẫu cho số đo ~150 giây / 10–20 giây / 31 giây, URL HTTPS và cách poll job. OpenAPI giữ nguyên schema nguồn; route tải .pdf trả file theo summary, dù schema nguồn vẫn khai báo response JSON tổng quát. CLI/MCP có lệnh tải file riêng.

Deploy thư mục local

Deploy từ thư mục local không cần GitHub

MCP monacloud-mcp 0.5.0 và CLI monacloud 0.4.1 đã hỗ trợ source local. Chọn MCP, CLI hoặc curl; app host tính phí như VPS, app không tính thêm.

Đặt MONACLOUD_TOKEN là chạy; CLI tự tải MCP qua npx. Ví local đọc số dư qua GET /api/me.

1. MCP tool: detect rồi create

cloud_app_detect(local_dir) đoán stack/port/Dockerfile, offline. Sau đó cloud_app_create({local_dir}) tự đóng zip và upload; thao tác tạo app cần kết nối MONA Cloud. local_dir là đường dẫn tuyệt đối trên máy đang chạy MCP.

Đối số local_dir
{"local_dir":"/duong-dan-tuyet-doi/du-an"}

Dùng đối số này cho cloud_app_detect, đọc kết quả, rồi gọi cloud_app_create với cùng local_dir và cấu hình build/cổng phù hợp. Đọc giá và ví, thử sandbox: true để mô phỏng không tính phí, và chờ bạn đồng ý với báo giá trước khi tạo app tính phí; poll bằng cloud_job_status, kiểm tra cloud_app_get và cloud_app_logs.

Prompt mẫu cho Claude Code/Codex · không chứa secret
Đưa dự án trong thư mục này lên web bằng MONA Cloud. Token ở biến MONACLOUD_TOKEN. Dùng cloud_app_detect rồi cloud_app_create với local_dir, xong đưa tôi link https.

2. CLI: chạy ngay trong thư mục dự án

Có Dockerfile/package.json trong thư mục hiện tại và MONACLOUD_TOKEN trong môi trường:

Thử miễn phí, rồi deploy thư mục hiện tại
npx -y monacloud deploy --sandbox
npx -y monacloud deploy

Lệnh có --sandbox thử miễn phí và trả URL giả; sau khi bạn đồng ý với báo giá, chạy lệnh thứ hai để deploy lên tài nguyên tính phí. CLI mặc định deploy thư mục hiện tại, kể cả khi thư mục có git remote. Dùng --git để lấy remote hiện tại hoặc --repo <url> nếu có URL GitHub public. --build nixpacks dùng khi không có Dockerfile và stack hỗ trợ Nixpacks.

3. Curl: tạo app upload rồi gửi archive

Hai request dưới đây tạo app tính phí sau khi bạn đã đồng ý với báo giá host. Để thử miễn phí, dùng CLI --sandbox hoặc MCP sandbox: true ở trên.

POST /api/apps thêm source: "git" | "upload". Với source=upload, không cần repo_url. Ví dụ dưới đây dùng app có Dockerfile, cổng 3000; chỉnh theo dự án. Đặt MONACLOUD_TOKEN trong phiên shell và MONACLOUD_API=https://api.monacloud.vn.

Tạo app chờ upload
curl -sS -X POST "$MONACLOUD_API/api/apps" \
  -H "Authorization: Bearer $MONACLOUD_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"source":"upload","build_type":"dockerfile","port":3000}'
Dạng phản hồi
{
  "id": "<app-id>",
  "upload_url": "/api/apps/<app-id>/upload",
  "max_bytes": 83886080,
  "job_id": "<job-id>",
  "status": "awaiting_upload",
  "url": "<url-https-cua-app>"
}

id là ID app, job_id là ID job. awaiting_upload chưa phải deploy xong. Gán APP_ID bằng id vừa nhận. Chuẩn bị app.zip sao cho Dockerfile hoặc các file ứng dụng nằm ngay gốc archive, rồi gửi lệnh thứ hai:

Gửi archive lên app
APP_ID="<app-id-tra-ve>"
curl -sS -X POST "$MONACLOUD_API/api/apps/$APP_ID/upload" \
  -H "Authorization: Bearer $MONACLOUD_TOKEN" \
  -F [email protected] \
  -F build_path=/

POST /api/apps/{id}/upload nhận multipart archive (zip hoặc tar.gz ≤ 80 MB) + build_path (mặc định /). Có thể đổi sang -F [email protected]. Không đặt Content-Type: application/json cho upload; curl tự tạo multipart boundary.

Server tự loại node_modules/, .git/, .env*, *.pem; chặn zip-slip; file phải nằm ở gốc archive (không bọc thêm một thư mục).

Upload trả job id; poll GET /api/jobs/{id} như git, dùng ID job trong phản hồi upload. Đợi job succeeded, đọc GET /api/apps/{app_id} rồi kiểm tra URL HTTPS. Nếu job lỗi, đọc lỗi và log trước khi thử lại; không tạo app mới liên tục. Đọc API reference cho schema.

Thời gian deploy đo được

Kết quả mong đợiThời gian đo ngày 05/09/2026 (tối)
Upload API tới URL HTTPS 200, gồm build image112 giây
MCP cloud_app_create(local_dir) tới URL HTTPS, host đã có33 giây
App host đầu tiên~150 giây

Số đo 05/09/2026: đây là số đo, không phải cam kết thời gian build cho mọi dự án.

Lỗi thường gặp khi upload

Lỗi thường gặpCách xử lý
Archive bọc thêm thư mục, trả 502Đóng lại từ bên trong thư mục dự án để file nằm ngay gốc archive; build_path mặc định /
Thiếu DockerfileDùng cloud_app_detect để nhận diện stack, chọn build_type: "nixpacks" / --build nixpacks nếu stack được hỗ trợ, hoặc thêm Dockerfile
Archive > 80 MB (83886080 byte)Loại dependency, cache và file không cần khỏi archive trước khi gửi; server chỉ lọc sau khi nhận, không thay thế bước giảm dung lượng

Gói tháng và hoá đơn

Gói tháng và hoá đơn đã LIVE

Gói tháng đang bán có những mức nào?

GóiGiá mỗi thángGiá năm (bằng giá 10 tháng)
Khởi nghiệp399.000đ3.990.000đ
Kinh doanh999.000đ9.990.000đ
Doanh nghiệp1.990.000đ19.900.000đ
Quy mô lớn3.990.000đ39.900.000đ

Khách MONA có gói miễn phí theo quyền tài khoản; credit tặng 100.000đ khi đăng ký. Đọc GET /api/plans hoặc cloud_plan_list để lấy code, CPU/RAM/disk và giá tháng/năm hiện hành. Backup PBS đang mở; không coi dòng cấu hình gói là bằng chứng đã có restore.

Mua và quản lý gói qua CLI/API thế nào?

Xem gói, tạo VPS gói tháng, xem hoá đơn
npx monacloud plans
npx monacloud vps create --plan kinh-doanh --monthly
npx monacloud invoices

Chọn mã gói từ danh sách trả về. API tạo VPS dùng POST /api/lxc với app_name, billing_mode: "monthly", plan_code và period: "month" hoặc "year"; không trộn package hoặc custom sizing. App host dùng POST /api/app-hosts với cùng các trường tính phí, rồi truyền app_host_id cho POST /api/apps.

Đọc GET /api/subscriptions để kiểm tra kỳ và gia hạn. POST /api/services/{service_id}/subscription nhận plan_code, period, auto_renew, cancel_action. Nâng gói tính phần thời gian còn lại; hạ gói từ kỳ sau. Tắt gia hạn bằng auto_renew: false; chọn cancel_action: "hourly" hoặc "stop" và kiểm tra kỳ hiệu lực trả về.

MCP có cloud_subscription_list và cloud_subscription_update. CLI/MCP thử cấu hình gói qua hourly sandbox miễn phí, không tạo subscription sandbox; vẫn báo giá kỳ tính phí trước khi bạn đồng ý.

Xem hoá đơn VAT mỗi tháng ở đâu?

Hoá đơn VAT 10% mỗi tháng đã LIVE. Mở console /invoices, dùng GET /api/invoices hoặc cloud_invoice_list. Tải file bằng GET /api/invoices/{invoice_id}.pdf, cloud_invoice_pdf hoặc npx monacloud invoices --pdf <id>.

Đọc số tiền và thuế trên hoá đơn của tài khoản. Danh sách nạp tiền GET /api/payments là dữ liệu thanh toán riêng. Quản lý gói tại console /subscriptions; đăng nhập MONA Pass đã bật.

Dùng mã credit như thế nào?

Console đã có redeem mã credit. MCP dùng cloud_credit_redeem với mã bạn nhận được; API dùng:

Đổi mã credit
curl -sS -X POST "$MONACLOUD_API/api/credit-codes/redeem" \
  -H "Authorization: Bearer $MONACLOUD_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code":"<ma-credit-cua-ban>"}'

Đặt token theo bắt đầu nhanh; kiểm tra kết quả và số dư sau khi đổi mã. Xem API reference cho schema đầy đủ.

Bắt đầu với MONA Cloud

AI agent thử toàn bộ luồng deploy bằng sandbox miễn phí

Sandbox trả job, IP và URL giả, không trừ tiền. Khi luồng đã đúng, AI báo giá VND và chờ bạn đồng ý rồi mới tạo tài nguyên tính phí.

Chạy thử miễn phí trong thư mục dự án
npx -y monacloud deploy --sandbox
  • Freechạy thử bằng sandbox
  • 33 giâydeploy khi host đã có
  • 112 giâyupload API tới HTTPS