bedengan-apps
Bedengan Apps MCP
現在、Bedengan App Hub(https://apps.wisatabedengan.com)でアプリを公開・更新する唯一の方法は、AIコーディングツール(例:Antigravity)経由です。ウェブページ経由ではありません。
日常的な使い方(要約): 一度インストールすれば(下記参照)、AIに 「このフォルダを新しいアプリとしてアップロードして」 や 「アプリXを最新コードで更新して」 と頼むだけです。残り(プロジェクトの確認、不足があれば修正、送信)は自動で行われます。手動で承認する管理者はいません。チェックを通過すれば、アプリはすぐに公開されます。
これはVPSへの新しい経路ではありません。 このサーバーは、自分のアカウントのトークンを使って同じハブAPIを呼び出すだけです。Dockerやサーバーに直接触れることはありません。
ラップトップに一度だけインストール
このフォルダをダウンロードします。
git cloneに慣れていない場合は、このリポジトリのGitHubページで緑色の "Code" → "Download ZIP" ボタンをクリックし、ラップトップの任意の場所(例:Documents/bedengan-apps-mcp)に解凍します。APIトークンを管理者から入手するか、すでにアカウントを持っている場合は自分で作成します:
https://apps.wisatabedengan.comにログイン → "Token API" ボタン → Buat / Perbarui Token API。表示されるコードは一度だけ表示されます。ウィンドウを閉じる前にメモしておいてください。解凍したフォルダでターミナルを開き、次を実行します:
npm install
npm run build
npm run initnpm run init は、ハブの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"]
}
}
}上記のパスを、解凍/インストールしたフォルダ(上記の手順1)内の dist/index.js の場所に置き換えてください。相対パスではなく完全なパスです。保存後、Antigravityを再起動します。これでAIは以下のツールを使えるようになります。
「このフォルダをアップロード」と頼んだ場合の流れ
AIがプロジェクトを検査します(
validate_project)— アプリの種類が検出されるか、秘密のファイル(.env、APIキー)がZIPに含まれていないか、構造が完全かどうかを確認します。修正が必要な点があれば、AIはその部分だけをコードで修正し、再チェックします。クリーンになるまで繰り返します。AIが本当に混乱しない限り、あなたが介入する必要はありません。
クリーンになったら、実際に送信します(新しいアプリは
submit_app、公開済みアプリの更新はupdate_app)。承認者は不要です。 しばらくすると、アプリは
https://<選択したサブドメイン>.apps.wisatabedengan.comで開けるようになります。
利用可能なツール
ツール | 機能 |
| ローカルフォルダをチェックします(何も送信しません)— アプリの種類の検出、構造の警告、修正しないと拒否される「エラー」を確認します。常に最初に呼び出されます。以下の2つのツールの前に、自動的に実行されます。 |
| 新しいアプリを公開します。チェックを通過 = 要求されたサブドメインで即座に公開されます。 |
| 自分のアカウントの公開済みアプリを最新コードで更新します。古いバージョンは自動的に保存されます(新しいバージョンに問題がある場合は、ウェブダッシュボードから復元できます)。 |
| 申請のステータスとビルドの進行状況を確認します。 |
| 自分のアカウントのすべてのアプリと申請を表示します。 |
使用しているAIコーディングツールが「MCPプロンプト」をサポートしている場合、上記の手順1〜4を1つのコマンドにまとめた、すぐに使えるフロー siapkan_dan_terbitkan もあります。サポートされていない場合でも問題ありません。AIは各ツールの説明から正しい順序を理解します。
拒否された場合
拒否メッセージには、修正すべき点が必ず記載されています。例:
"Ditolak otomatis -- ada indikasi rahasia ikut terunggah: Berkas .env ikut ter-zip" → 送信するプロジェクトから
.envを削除/除外します(下記の「自動的に除外されるもの」を参照)、そして再試行します。"Jenis aplikasi tidak dikenali" → 通常、メインファイルが期待される場所にない(例:
index.html/app.py/package.jsonが最外フォルダにない)か、startスクリプトがないことを意味します。AIに構造を修正してもらいます:静的ウェブはルートにindex.htmlが必要、Pythonはapp.py+requirements.txtが必要、Nodeはprocess.env.PORTを読み取り0.0.0.0でリッスンする"start"スクリプトを持つpackage.jsonが必要です。"Jatah aplikasi Python/Node Anda sudah penuh" → ウェブダッシュボードで不要になった古いアプリを削除してから、再試行してください。
永続化が必要なデータの保存(データベース、ユーザーアップロードなど)
アプリが独自にデータを保存する場合(例:給与データベース、ユーザーアップロード、入力結果)、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 ファイルを作成します — 各行に相対パスのフォルダ/ファイル名を1つずつ記述します(.gitignore のような完全なグロブではなく、正確な名前で十分です)。
トークンが漏洩した場合
ウェブダッシュボード(「Token API」ボタン →「Cabut Token API」)から自分で失効させるか、管理者に管理パネルから失効させてもらいます。ログインパスワードやウェブセッションには影響しません。新しいトークンを作成し、npm run init を再度実行してください。
Available Tools
5 toolscheck_statusCek status pengajuanA
Lihat status sebuah pengajuan (menunggu/disetujui/ditolak) dan progres build-nya kalau sudah disetujui.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | ID pengajuan, didapat dari balasan submit_app. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Nama aplikasi. | |
| path | Yes | Folder proyek lokal, path absolut. | |
| notes | No | Catatan tambahan, opsional (tidak dibaca admin -- tidak ada lagi). | |
| subdomain | Yes | Subdomain yang diinginkan (huruf kecil, angka, tanda hubung saja), mis. "kalkulator-tenda". | |
| department | No | Departemen/tim pengaju, opsional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Folder proyek lokal, path absolut. | |
| appId | Yes | ID aplikasi yang akan diperbarui, didapat dari list_my_apps. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Folder proyek lokal, path absolut. |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v0.1.0- First observed
check_status - First observed
list_my_apps - First observed
submit_app - First observed
update_app - First observed
validate_project
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
Build, validate, deploy — HTTP APIs, cron jobs, webhooks and MCP tools — from your AI client.
Build and publish full-stack apps from your coding agent: models, rules, pages, auth, per-app MCP.
Deploy and manage your apps, databases, storage, and scheduled jobs from your AI agent
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables 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 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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.1MIT

@betadrop/mcpofficial
AlicenseAqualityAmaintenanceEnables AI coding assistants to distribute iOS and Android builds to BetaDrop testers, manage share links, track releases, and manage API tokens entirely through natural language prompts.1169 npmMIT- AlicenseNot gradedqualityCmaintenanceEnables 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