自分のエージェントでエコシステム向けに構築する
すでに使用しているAIエージェント(Claude, ChatGPT, Cursor, Gemini, またはMCP対応ツール)でSOIS拡張機能を構築します。エージェントをSOIS MCPサーバーに接続し、自分のマシンで拡張機能を構築してから、レビューと公開のためにアップロードします。自分のAIを使用します。SOISは構築に料金を請求しません。
これはエコシステム向けのパスです。誰でもマーケットプレイス向けに構築し、自分のアプリから収益を得られます。カスタム拡張機能を構築するために開発者ポータルは必要ありません。エージェントを接続するだけで十分です。ポータルはマーケットプレイスへの公開と収益の管理を行う場所です。収益モデルについてはアプリを収益化するを参照してください。
仕組み
- エージェントを接続します。ワークスペースのMCPサーバーへ接続します(OAuthまたはトークン)。
- ローカルで構築します。MCP経由でエージェントが読み取るSOIS仕様に対して構築します。
- 検証します。問題がなくなるまで無料の静的チェックを実行します。
- バンドルをアップロードします。ハードニングされ、ゲートされ、レビューのキューに入ります。
- レビューと公開。承認されると、拡張機能がマーケットプレイスで公開されます。
エージェントを接続する
ビルドツールはワークスペース独自のMCPサーバー上にあり、MCP Serverで説明したエンドポイントと同じです。別途ビルドサーバーをセットアップする必要はありません。一度接続すれば、アカウントにビルド権限があるため、ビルドツールがエージェントのツール一覧に自動的に表示されます。管理者ゲートがかかっているため、ビルダー権限を持つアカウントにのみ表示されます。
Server: https://<your-workspace-host>/api/mcp
Discovery: https://<your-workspace-host>/.well-known/mcp.json
接続方法: 推奨はOAuthです。MCP URLをクライアント(Claude, ChatGPT, Cursorなど)に追加すると、サインインが検出され、何も貼り付けずに接続できます。OAuthに対応しないクライアントでは、BearerトークンとX-Api-Keyヘッダーも使用できます。接続フローと検出の詳細はMCP Serverを参照してください。
その後、エージェントでビルドツールが利用可能になります。ビルドを始める際は、まずルールの読み取りを依頼してください。
ビルドツール
| Tool | What it does |
|---|---|
getExtensionRules |
正規のマニフェスト、マイグレーション、パーミッション、ツールキット、i18n、UIおよびセキュリティのルール。最初に呼び出します。 |
getExtensionFrameSpec |
ローカルプレビュー用のホストフレーム契約: マウントシグネチャ、テーマトークン、REST APIの形状、バンドル形式。 |
createExtensionProject |
新しいアプリプロジェクトを作成します。project_idを返します。 |
validateExtensionBundle |
ファイルに対して無料の静的ゲートをドライランし、修正すべき問題を返します。必要なだけ実行できます。 |
uploadExtensionBundle |
バンドルを送信します。ハードニングされ、ゲートされ、パスすればレビューのキューに入ります。 |
getExtensionStatus |
プロジェクトのライフサイクルステータスと最新の検証レポート。 |
listExtensionProjects |
自分のプロジェクトとそのステータス。 |
バンドル形式
拡張機能は少数のファイルのバンドルです:
| File | Purpose |
|---|---|
manifest.json |
唯一の信頼できる情報源: id、エンティティ、データモデル、パーミッション、ファイル。 |
index.js |
UI。window.AppExtension.mount経由でマウントされるバニラJavaScriptのIIFEとして記述します。バンドル内にフレームワークはありません。 |
toolkit.js |
オプションのエージェントツール。審査員パターンに従います。 |
permissions.json |
ルート名と一致するパーミッションキー。 |
migrations/ |
ext_{name}_{table}という名前のデータベーステーブル。idとdata JSONカラムを持ちます。 |
lang/ |
ロケールファイル。すべてのキーにext_{name}.というプレフィックスを付けます。 |
getExtensionRulesからエージェントが適用する主なルール:
- ビジネスフィールドは個別のカラムではなく
dataJSONカラム内に配置します。 - 拡張機能間の外部キーは使用不可。マイグレーションの
up()内でDROP、TRUNCATE、dropColumnは使用不可。生SQL、シェル、ファイルシステムアクセスは使用不可。 - UIは
--ext-*テーマトークンでスタイル設定し、SOISに合わせます。色やユーザー向けテキストをハードコードしないでください。
アップロード前に検証する
validateExtensionBundleはアップロード時にサーバーが実行するものと同じ無料の静的ゲートを実行するため、まずローカルで問題を修正できます。ファイルタイプ、マイグレーションの安全性、マニフェスト構造、命名、i18nをチェックします。サーバー側のゲートが常に権威を持ちます。ローカルでパスしても保証にはなりません。
アップロード、レビュー、公開
uploadExtensionBundleがパスを報告すると、バンドルは非公開のレビュー領域に保存され、プロジェクトはレビューに移行します。レビュアーが確認し、承認すればマーケットプレイスに公開され、フィードバック付きで返却されれば修正して再度アップロードします。