Skip to main content
Glama

Bedengan Apps MCP

现在在 Bedengan App Hub(https://apps.wisatabedengan.com)发布或更新应用的唯一方式——通过 AI 编码工具(例如 Antigravity),不再通过网页。

日常使用方式,简而言之: 安装完成后(只需一次,见下文),只需让 AI "帮我把这个文件夹上传为新应用" 或 "用最新代码更新应用 X"。其余工作——检查项目、修复缺失的部分、然后提交——全部自动完成。不再需要管理员手动审批:一旦通过检查,应用立即上线。

这不是通往 VPS 的新通道。 此服务器仅通过您自己的账户令牌调用同一个 hub API——从不直接接触 Docker 或服务器。

在笔记本电脑上安装一次

  1. 下载此文件夹。 如果不熟悉 git clone,只需点击此 GitHub 仓库页面上的绿色 "Code" → "Download ZIP" 按钮,然后解压到笔记本电脑上的任意文件夹(例如 Documents/bedengan-apps-mcp)。

  2. 向管理员索取 API 令牌,或者如果已有账户可自行创建:登录 https://apps.wisatabedengan.com → 点击 "Token API" 按钮 → 创建 / 更新 API 令牌。显示的代码只出现一次——关闭窗口前请先记下来。

  3. 在刚才解压的文件夹中打开终端,运行:

npm install
npm run build
npm run init

npm run init 会询问 hub URL(按 Enter 使用默认值 https://apps.wisatabedengan.com)和第 2 步的令牌。配置保存在您自己笔记本电脑的 ~/.bedengan-apps/config.json 中——绝不会被打包进任何项目,也不得与他人分享。

Related MCP server: Deploy MCP

连接到 Antigravity

添加到 Antigravity 的 MCP 服务器设置中(在其设置中找到 "MCP Servers" 菜单):

{
  "mcpServers": {
    "bedengan-apps": {
      "command": "node",
      "args": ["/path/absolut/ke/folder-hasil-ekstrak/dist/index.js"]
    }
  }
}

将上面的路径替换为刚才解压/安装的文件夹中 dist/index.js 的位置(上面的第 1 步)——使用完整路径,而非相对路径。保存后,重启 Antigravity——AI 现在可以使用下面的工具了。

当被要求"上传这个文件夹"时会发生什么

  1. AI 检查项目(validate_project)——检查应用类型是否被识别、是否有秘密文件(.env、API 密钥)被打包、以及结构是否完整。

  2. 如果有需要修复的地方,AI 只修复代码中的那部分,然后重新检查——反复进行直到干净。除非 AI 真的困惑,否则您无需干预。

  3. 干净之后,真正提交(新应用用 submit_app,更新已上线的应用用 update_app)。

  4. 无需任何人审批。 片刻之后,应用就可以在 https://<subdomain-pilihan>.apps.wisatabedengan.com 打开。

可用工具

Tool

功能

validate_project

检查本地文件夹(不发送任何内容)——应用类型是否被识别、结构警告、以及如果不先修复就会导致被拒绝的"硬错误"。始终最先自动调用,先于下面两个工具。

submit_app

发布新应用。通过检查 = 立即在请求的子域名上线。

update_app

用最新代码更新自己账户已上线的应用。旧版本自动保存(如果新版本有问题,可以通过 Web 仪表板恢复)。

check_status

检查提交的状态及其构建进度。

list_my_apps

查看自己账户的所有应用和提交——包括 update_app 所需的 appId。

如果所用的 AI 编码工具支持 "MCP prompts",还有一个名为 siapkan_dan_terbitkan 的现成流程,将上面的第 1-4 步封装为一条命令。如果不支持也没关系——AI 仍然能从每个工具的描述中知道正确的顺序。

如果被拒绝

拒绝消息总会说明需要修复什么,例如:

  • "自动拒绝——有迹象表明秘密文件被上传:.env 文件被打包" → 从发送的项目中删除/排除 .env(见下文"自动排除的内容"部分),然后重试。

  • "无法识别应用类型" → 通常是因为主文件不在预期位置(例如 index.html/app.py/package.json 不在最外层文件夹)或没有 start 脚本。让 AI 修复结构:静态网站需要在根目录有 index.html,Python 需要 app.py + requirements.txt,Node 需要带有 "start" 脚本的 package.json,该脚本读取 process.env.PORT 并监听 0.0.0.0。

  • "您的 Python/Node 应用配额已满" → 先通过 Web 仪表板删除一个不再使用的旧应用,然后再试。

保存需要持久化的数据(数据库、用户上传等)

如果应用自己存储数据(例如工资数据库、用户上传、输入结果),并且即使以后通过 update_app 更新应用,数据也必须保留,请将所有内容保存在项目根目录的 ./data/ 文件夹中(相对于 package.json/app.py/index.html 所在的文件夹)。该文件夹是应用中唯一在代码更新时不会被替换的部分——其他部分(代码、node_modules 等)在每次 submit_app/update_app 成功时都会被完全替换。

如果项目在首次上传时 ./data/ 文件夹中已有真实数据(例如同事从自己的笔记本电脑迁移了一个已在使用的应用,连同其内容)——这些数据会一并携带,从一开始就存在于服务器上,无需再手动迁移。

打包 ZIP 时自动排除的内容

node_modules、.git、__pycache__、.venv/venv、.DS_Store、.next、.cache。要排除其他内容,请在项目文件夹根目录创建 .bedenganignore 文件——每行一个相对文件夹/文件名(不像 .gitignore 那样使用完整 glob,只需精确名称)。

如果令牌泄露

通过 Web 仪表板自行撤销("Token API" 按钮 → "Cabut Token API")或让管理员从管理面板撤销——登录密码和 Web 会话不受影响。创建新令牌,再次运行 npm run init。

Available Tools

5 tools
check_statusCek status pengajuanA

Lihat status sebuah pengajuan (menunggu/disetujui/ditolak) dan progres build-nya kalau sudah disetujui.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdYesID pengajuan, didapat dari balasan submit_app.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It discloses that the tool is a read-only status lookup, enumerates the possible statuses, and notes the conditional build-progress behavior for approved requests. This is adequate for a low-risk check operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise, front-loaded sentence with no filler. Every part adds useful information: what is checked, the possible statuses, and the conditional progress detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter status-check tool, the description covers the core behavior and expected result categories. There is no output schema, but the description's mention of statuses and build progress provides sufficient guidance for an agent to call and interpret the tool without missing critical context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single parameter requestId is already documented as coming from submit_app's reply. The tool description adds no additional parameter-level meaning, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Lihat') and resource ('sebuah pengajuan'), and clarifies the exact scope: status values (menunggu/disetujui/ditolak) plus build progress when approved. This clearly separates it from sibling tools like submit_app or update_app, which are about creating or modifying submissions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool is clearly positioned as the status lookup after a submission exists, and the requestId parameter description says it comes from submit_app's reply. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to know when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_appsDaftar aplikasi & pengajuan sayaA

Lihat semua aplikasi yang sudah tayang dan pengajuan yang masih berjalan milik akun ini.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. 'Lihat' signals a read-only listing and the status qualifiers ('sudah tayang', 'masih berjalan') add filter semantics. However, it does not mention pagination, sorting, authorization, or what happens when there are no results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every phrase adds scope or status information, and the list-like structure matches the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple zero-parameter design and no output schema, the description sufficiently states what the tool returns conceptually: the account's published apps and ongoing submissions. It could be more complete by noting read-only guarantees or result set behavior, but nothing critical is missing for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so there are no parameter semantics to document. The baseline for a zero-parameter tool is 4, and the description does not need to compensate for any schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Lihat' (view) and names the resource precisely: all published apps ('aplikasi yang sudah tayang') and ongoing submissions ('pengajuan yang masih berjalan') belonging to the current account. This separates it from the sibling tools, which validate, submit, check status, or update rather than list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly implies the appropriate context: use when the agent needs an overview of the current account's published apps and in-progress submissions. It does not explicitly name sibling alternatives or exclusions, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_appTerbitkan aplikasi baru ke Bedengan App HubA

Panggil validate_project LEBIH DULU dan pastikan hasilnya "ok": true. Kirim folder proyek lokal sebagai aplikasi BARU. Tidak ada admin yang meninjau lagi -- kalau lolos pemeriksaan (struktur & pemindaian rahasia), aplikasinya LANGSUNG LIVE di subdomain yang diminta dalam beberapa saat, bukan menunggu persetujuan. Kalau ditolak, pesan errornya selalu menyebutkan apa yang harus diperbaiki -- perbaiki lalu panggil validate_project lagi sebelum mencoba submit_app lagi. Untuk aplikasi yang SUDAH live sebelumnya, pakai update_app, BUKAN submit_app lagi (subdomain yang sudah dipakai akan ditolak).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNama aplikasi.
pathYesFolder proyek lokal, path absolut.
notesNoCatatan tambahan, opsional (tidak dibaca admin -- tidak ada lagi).
subdomainYesSubdomain yang diinginkan (huruf kecil, angka, tanda hubung saja), mis. "kalkulator-tenda".
departmentNoDepartemen/tim pengaju, opsional.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It reveals that publication is immediate with no admin review, that apps pass through structure and secret scanning, that rejection errors always explain what to fix, and that duplicate subdomains are rejected. It does not mention authentication or the exact success response, but the core behavior is clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the first gives the prerequisite, the second clarifies new-app-only submission, the third explains rejection handling, and the fourth distinguishes update_app. There is no filler, and the information is logically ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no output schema, and no annotations, this description covers the prerequisite, validation flow, immediate publication behavior, error recovery, and sibling distinction. The main gap is that it does not describe what a successful submit_app call returns, which would be useful given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% parameter description coverage, so the baseline is 3. The description adds some contextual meaning—such as treating 'path' as the local project folder and 'subdomain' as the requested, unused subdomain—but it does not substantially improve on the schema's parameter explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that submit_app publishes a new local project as a brand-new app to Bedengan App Hub, using a specific verb and resource. It also distinguishes itself from update_app by explicitly saying already-live apps must use update_app instead, so there is no confusion with siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage guidance: call validate_project first and ensure its result is 'ok': true, use submit_app only for new apps, and use update_app for apps that are already live. It also warns that an already-used subdomain will be rejected, preventing an obvious misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_appPerbarui aplikasi yang sudah liveA

Panggil validate_project LEBIH DULU dan pastikan hasilnya "ok": true. Timpa aplikasi yang SUDAH live milik akun ini sendiri dengan kode terbaru di folder lokal. Lolos pemeriksaan = LANGSUNG live menggantikan versi lama, tanpa siapa pun meninjau. Versi lama otomatis tersimpan (bisa dikembalikan lewat dashboard web kalau versi baru ternyata bermasalah). Dapatkan appId dari list_my_apps.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFolder proyek lokal, path absolut.
appIdYesID aplikasi yang akan diperbarui, didapat dari list_my_apps.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full disclosure burden. It reveals that passing validation immediately replaces the live version with no review, that the old version is automatically saved, and that rollback is possible via the web dashboard. This gives the agent a clear picture of the destructive yet recoverable behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the mandatory prerequisite, then states the core action, and then explains the deployment and rollback consequences. Every sentence contributes useful information, though the phrasing is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no output schema, the description covers the required prerequisite, the effect, and the recovery path. It does not describe the return value of update_app itself, but that is not essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both path and appId already described. The description reinforces that appId comes from list_my_apps and that path refers to the local folder, but it adds no substantially new semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it overwrites an already-live app owned by this account with new code from a local folder. It clearly distinguishes this from a new submission by emphasizing 'SUDAH live' and by tying prerequisites to validate_project and list_my_apps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs that validate_project must be called first and its result must be 'ok': true, and that appId comes from list_my_apps. It does not explicitly name submit_app as an alternative or state when not to use this tool, but the 'already live' scope strongly implies the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_projectValidasi proyek Bedengan AppsA

WAJIB dipanggil LEBIH DULU, setiap kali, sebelum submit_app atau update_app -- tidak ada admin yang meninjau lagi, jadi ini satu-satunya kesempatan menangkap kesalahan sebelum aplikasinya live. Bungkus folder proyek lokal jadi ZIP dan validasi lewat Bedengan App Hub, TANPA mengajukan apa pun (tidak masuk antrean, tidak tercatat di database). Balasannya berisi jenis aplikasi yang terdeteksi (static/python/node/spa), peringatan struktur (mis. node_modules ikut ter-zip -- boleh diabaikan), dan "kesalahan" keras (mis. .env atau pola rahasia ikut ter-zip, entry point tidak ditemukan -- ini yang akan membuat submit_app/update_app DITOLAK). Kalau ada "kesalahan", perbaiki HANYA hal yang disebutkan di proyek lokal (jangan mengubah bagian lain yang tidak terkait), panggil tool ini lagi sampai "ok": true, baru lanjut ke submit_app/update_app.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFolder proyek lokal, path absolut.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does it well. It discloses that the tool does not submit, queue, or record anything, and it describes the response contents: detected app type, ignorable warnings, and hard errors that cause rejection. It also clarifies the consequences of errors on later submit/update calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although the description is long, every sentence earns its place: mandatory call order, side-effect transparency, response schema, error handling, and the retry loop. The critical instruction is front-loaded ('WAJIB dipanggil LEBIH DULU'), and examples are used efficiently to clarify warning versus error severity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description compensates by describing exactly what the response will contain and how to interpret it. It also explains the tool's non-mutating behavior, the consequences of hard errors, and the exact follow-up path. Nothing essential for correctly invoking and acting on this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes the only parameter, `path`, as an absolute local project folder path. The description adds context that this folder will be zipped and validated, but it does not introduce new parameter-specific constraints or format details. Baseline 3 is appropriate given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: zip a local project folder and validate it through Bedengan App Hub without submitting anything. It also clearly distinguishes this from submit_app/update_app by saying it never queues or records anything, so the agent knows exactly what the tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly mandates when to use the tool: always before submit_app or update_app, and even explains why ('tidak ada admin yang meninjau lagi'). It also gives the retry workflow: fix only mentioned issues, revalidate until 'ok': true, only then proceed. This is strong, actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedcheck_status
    • First observedlist_my_apps
    • First observedsubmit_app
    • First observedupdate_app
    • First observedvalidate_project

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation4/5

Each tool has a reasonably distinct role: validation, creation, updating, status lookup, and listing. The only mild overlap is between check_status and list_my_apps, since both expose submission/app state, but one is single-item-oriented and the other is an overview.

Naming Consistency5/5

Tool names consistently follow a verb_noun pattern: validate_project, submit_app, check_status, update_app, list_my_apps. The style is uniform and predictable, making it easy to anticipate what each tool does.

Tool Count5/5

Five tools is well-scoped for an app deployment workflow: validate, create, update, check status, and list apps. Each tool earns its place and there is no unnecessary redundancy or bloat.

Completeness4/5

The core lifecycle is covered: validate before deploy, submit new apps, update existing apps, check status, and list owned apps. A delete or rollback tool is missing, but rollback is explicitly handled through the web dashboard, so the gap is minor.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to deploy code to any hosting provider by creating PRs, building, and verifying health checks, all from a single natural language command.
    378 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding assistants to deploy websites directly to Vercel from the IDE, automating framework detection, build validation, and secure environment variable synchronization, with live status updates.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to build, deploy, and inspect apps through a hosted backend service, including reading platform docs, deploying raw source, inspecting logs, verifying live pages in browsers, and managing project tasks.
    MIT