MCP 経由の RunApps
RunApps (https://www.runapps.ai) は AI Web アプリ を公開します。クリエイターが静的フロントエンドバンドル(zip)をアップロードすると、https://<slug>.runapps.dev で提供され、ユーザーは RunApps アカウントでサインインし、自身のモデル使用料を支払い、クリエイターはすべての呼び出しに対して手数料を得ます。以下のすべては runapps MCP サーバーと SDK を介して行われます。まだ接続していませんか?「接続する」を参照してください。
このファイルはエントリポイントです。接続、プラットフォームモデル、ツールカタログ、ワークフロー、およびルールについて説明します。SDK(アプリコードがモデルやファイルと通信する方法)は references/sdk.md に、正確なツールパラメータは references/tools.md にあります。タスクに必要な部分だけを読んでください。
接続する(認証)
信頼できる最新バージョンは常に https://www.runapps.ai/agent/setup.md にあります。以下は短縮版です。ユーザーがパスワードを入力することはなく、あなたがパスワードを見ることもありません。キーを要求し、ユーザーがブラウザで一度「承認」をクリックします。
- キーを要求する:
POST https://www.runapps.ai/api/agent/device/codeに JSON{"name": "<あなたの名前> @ <マシン>", "scopes": "read,develop,publish,gateway"}を送信します。応答にはdevice_code、user_code、verification_uri_complete(https://www.runapps.ai/agent/authorize?code=XXXX-XXXX)、expires_in(600 秒)、interval(5 秒)が含まれます。verification_uri_completeをそのままユーザーに表示し、開いて承認するよう依頼してください。nameはキーの識別子です。同じ名前のリクエストを承認すると、その名前の以前のキーが失効されるため、セットアップを再実行してもキーが蓄積されることはありません。 - ポーリングする:
interval秒ごとにPOST https://www.runapps.ai/api/agent/device/tokenに{"device_code": "…"}を送信します。statusはpending(待機)、slow_down(バックオフ)、denied/expired(停止してユーザーに伝える)、またはapproved(api_key(rk_…)、key_prefix、scopes、mcp_urlを返す)です。一度だけ取得し、すぐに MCP 構成に書き込んでください。会話、ログ、リポジトリに決して書き込まないでください。 - 接続する: MCP Streamable HTTP を
https://www.runapps.ai/api/mcpで、ヘッダーAuthorization: Bearer <api_key>とともに使用します。Claude Code の場合:claude mcp add --transport http runapps "https://www.runapps.ai/api/mcp" --header "Authorization: Bearer <api_key>"。Codex の場合:[mcp_servers.runapps] url = "https://www.runapps.ai/api/mcp"、http_headers = { Authorization = "Bearer <api_key>" }。その他のクライアントの場合: 同じ URL とヘッダーを使用します。その後tools/listを実行します。initializeからのinstructionsが推奨ワークフローを提供します。
スコープ: read、develop、publish、gateway はデフォルトで付与されます。danger(削除 / 公開取り消し)は、明示的に要求し、その理由をユーザーに説明しない限り含まれません。ユーザーは承認ページでスコープのチェックを外したり、後で https://www.runapps.ai/dashboard/api でキーの名前変更、スコープ変更、または失効を行うことができます(スコープ変更は次の呼び出しに適用され、新しいキーは不要です)。スコープなしで呼び出されたツールは、スコープ名を示すエラーを返します。ユーザーに再度承認を依頼してください。回避しないでください。
同じキーは、gateway スコープがある場合、ゲートウェイ(https://www.runapps.ai/v1、OpenAI 互換、Authorization: Bearer rk_…)でも機能します。構築したアプリのテスト用です。各呼び出しはユーザーに請求されます。完全に切断するには、confirm: true を指定して revoke_my_key を呼び出します。
プラットフォームモデル
| オブジェクト | 説明 | アクセス方法 |
|---|---|---|
| アプリ(プロジェクト) | プラットフォームが割り当てた slug、名前、1 行の説明、Markdown の長い説明、カテゴリ、アイコン、可視性、クリエイター手数料(rebate_rate)を持つ公開バンドル。バンドルなしの 下書き として作成されるため、コードが存在する前にスラッグが存在します。 | list_apps、get_app、create_app、update_app |
| バンドル | アプリのビルドの zip。全体が保存され、https://<slug>.runapps.dev でファイルが提供されます。ドットファイル(.private/…)は提供されません。zip ルートの index.html がデフォルトのエントリです。 | upload_bundle(+ PUT)、upload_bundle_base64、check_bundle |
| 可視性 | draft(クリエイターのみ)→ private(未公開:リンクを知っている人なら誰でもアクセス可能、レビューなし)または public(ライブラリ内。初回 の public への移行はレビューされ、pending と表示されます。以降の更新は即座に公開されます。却下された場合は review_note が付きます)。 | update_app(visibility を指定)、get_review |
| ユーザーとサインイン | ユーザーはアプリ内で RunApps アカウントを使用してサインインします(SDK が実行します。キーなしで new RunApps())。各ユーザーは自身のモデル使用料とクリエイター手数料を支払います。アプリはキーを保持しません。 | SDK(references/sdk.md) |
| プライベートプロンプト | アプリが出荷するがブラウザには表示されないプロンプトファイル。zip 内の .private/prompts/<id>.md。アプリは prompt: { id, vars } を送信し、ゲートウェイがそれを埋めて先頭に追加します。 | get_app / check_bundle が見つかった ID を一覧表示します |
| ユーザーごとのファイルと同期 | 各ユーザーはアプリごとにファイルスペース(client.files)を持ち、IndexedDB 同期(client.sync)がローカルデータベースをそのスペースにミラーリングします。 | SDK |
| モデル | チャット、ビジョン、画像、音声、文字起こし、動画、埋め込み、リアルタイムモデルのカタログ。リクエストはカタログ名でモデルを指定します。 | list_models |
| エージェントキー | あなたが保持する rk_ キー。kind = agent、スコープ付き。ユーザーの API キーの下にリストされます。 | revoke_my_key |
カテゴリ: クリエイティブ、コンテンツ、生産性、マーケティング、エンジニアリング、デザイン、研究、データ分析、ビジネス、ファイナンス。
ワークフロー
- 作成:
create_appにname(およびdescription、category)を指定します。結果にはslug(proj-xxxxxxxx、プラットフォームによって割り当てられ、あなたやユーザーが選択することはありません。管理者が後でリストされたアプリに読みやすいスラッグを割り当てることがあります)とurlが含まれます。スラッグをユーザーに伝えてください。 - ローカルで開発する: スラッグに対して(
references/sdk.md、「アプリを構築する」):<script src="https://www.runapps.ai/sdk/latest.js"></script> <script> const client = new RunApps({ project: "<slug>" }); const r = await client.chat.create({ model: "Claude Sonnet 4.6", messages: [{ role: "user", content: "hi" }] }); </script>http://localhost:<port>からのサインインが機能し、呼び出しは実際のゲートウェイを通過します。list_modelsからモデルを選択します(正確な名前)。アプリコードにrk_キーを決して入れないでください。 - ビルドフォルダの内容をビルドして zip する:
cd dist && zip -r ../app.zip .を実行して、index.htmlが zip ルートにあるようにします(フォルダ自体を zip 化するのが最も一般的な間違いです)。絶対アセットパスは機能します。ドットフォルダは非表示になります。 - アップロード:
upload_bundle→upload_urlに zip をPUTします(curl -sS -X PUT -H 'Content-Type: application/zip' --data-binary @app.zip '<upload_url>')。PUT 応答はバンドルレポートです。すべての警告(SDK が読み込まれていない、エントリがルートにない、ページ内のキー)を修正してください。check_bundleはいつでも再読み取りできます。 - 説明:
update_appにdescription(1 行、何をするか)、long_description(Markdown:ユーザーが得られるもの、使用方法、実際のコスト)、category、icon_url(正方形の PNG/SVG、https または data URL)を指定します。 - 出荷: 共有リンクの場合は
update_appにvisibility: "private"を、ライブラリの場合は"public"を指定します。"public"の後、get_reviewはレビュー担当者が決定するまでpendingを表示します。rejectedにはreview_noteが付属するため、それに対処してから再度publicに設定します。公開する前に、自分でurlを開いてください(またはユーザーに依頼してください)。404 または空白ページを表示するバンドルは却下されます。
更新: 新しいバンドルをアップロードするか、いつでもメタデータを変更できます。公開アプリは公開されたままです。
ルール
[danger]ツール(unpublish_app、delete_app)は、他の人が使用している可能性のあるものを削除します。最初にユーザーに確認し、同意した場合のみconfirm: trueを渡します。dangerスコープがない場合は、とにかく拒否されます。gatewayスコープで行われたすべてのモデル呼び出し、およびユーザーのアプリが行うすべての呼び出しは、実際の費用がかかります。短いプロンプトと安価なモデルでテストしてください。list_modelsは価格を表示します。- キーはユーザーのものです。マシンごとに 1 つ(
nameで区別されます)。決して共有せず、MCP 構成以外の場所に書き込まないでください。切断を求められたらrevoke_my_keyで失効します。 - モデル名をでっち上げないでください。
list_modelsを使用してください。不明な名前は 400 エラーになります。決してサイレントに置き換えられません。 - プライベートプロンプトのテキストは秘密に保つ必要があります。ゲートウェイはそれをエコーする応答を保留します。
次に読む場所
| タスク | 読む場所 |
|---|---|
| アプリの作成: サインイン、チャット、ストリーミング、画像、音声、動画、ファイル、同期、プライベートプロンプト、エラー | references/sdk.md |
| 正確なツールパラメータと結果の形状 | references/tools.md |
| 接続(全文、常に最新) | https://www.runapps.ai/agent/setup.md |
| バンドルの構築、公開、収益 | references/sdk.md → 「アプリを構築する」、「公開する」 |