krova について
krovaは、Krova Cloud上のFirecracker microVM「Cubes」をAIエージェントから作成・管理するMCPサーバーです。公式SDKを介した型検証付きツールを提供し、APIキーで認証します。
主な機能
- 01Cubeの作成と管理
- 02リージョン、イメージ、料金の確認
- 03ドメインとTCPポートマッピングの管理
- 04スナップショット作成とバックアップ管理
- 05Webhookエンドポイントと配信履歴の管理
活用シーン
- 01UbuntuまたはDebianの仮想マシンを作成
- 02稼働中のCubeを確認して停止
- 03Cubeにドメインとポートマッピングを設定
- 04スナップショット作成やバックアップ共有を実施
MCP 対応
stdio経由でKrova Cloud APIの操作ツールをMCPクライアントに提供します。`KROVA_API_KEY`で認証し、デフォルトのSpaceも設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @krovacloud/mcpKROVA_API_KEYシークレットA Krova Cloud API key, created under Settings → API keys. Scoped to one Space and inherits the permissions of the membership that created it.KROVA_SPACE_IDOptional. A Space id the Cube tools default to, so a client does not have to name a Space on every call.KROVA_BASE_URLOptional. Overrides the API base URL. Only needed against a non-production environment.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
30掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| spaceId | string | いいえ | Krova Cloud Space の id です。KROVA_SPACE_ID がサーバーのデフォルトとして設定されている場合は省略可能です。 |
詳細
@krovacloud/mcp
Krova Cloud 用の MCP サーバーです — Claude、Cursor、およびあらゆる MCP クライアントが、自然言語で Cubes(Firecracker マイクロ VM)をプロビジョニング、管理できます。
Krova Cloud を、AI エージェントが呼び出せるツール群として公開する Model Context Protocol サーバーです。Claude に「us に 2 vCPU の Ubuntu キューブを起動して」「実行中のキューブを一覧表示して」「アイドル状態のものをシャットダウンして」と頼むと、代わりに Krova Cloud API を操作します。
公式の @krovacloud/sdk を介した、薄く完全に型付けされたブリッジです。Krova Cloud の各操作は、検証済みの入力スキーマを備え、API キーで認証される MCP ツールです。
クイックスタート
試すのに最も手軽な方法です。インストールもクローンも不要です。
KROVA_API_KEY=kro_... npx -y @krovacloud/mcp
サーバーは stdio 経由で MCP を通信するため、通常は手動で起動しません。MCP クライアントがこのコマンドで起動します。以下からクライアントを選んでください。
クライアントの設定
すべてのクライアントで同じ起動コマンド(npx -y @krovacloud/mcp)と同じ環境変数を使用します。少なくとも KROVA_API_KEY を設定してください。Cube ツールのデフォルト Space を指定する場合は、KROVA_SPACE_ID も設定してください。
Claude Desktop
claude_desktop_config.json(Settings → Developer → Edit Config、または macOS では ~/Library/Application Support/Claude/claude_desktop_config.json、Windows では %APPDATA%\Claude\claude_desktop_config.json)を編集して、以下を追加します。
{
"mcpServers": {
"krova": {
"command": "npx",
"args": ["-y", "@krovacloud/mcp"],
"env": {
"KROVA_API_KEY": "kro_your_api_key_here",
"KROVA_SPACE_ID": "space_optional_default"
}
}
}
}
Claude Desktop を再起動します。Krova Cloud ツールがツール(🔨)メニューに表示されます。
Claude Code
次のコマンドでサーバーを追加します。
claude mcp add krova \
--env KROVA_API_KEY=kro_your_api_key_here \
--env KROVA_SPACE_ID=space_optional_default \
-- npx -y @krovacloud/mcp
または、プロジェクトのルートにある .mcp.json に追加します(コミットしてチームで共有できます)。
{
"mcpServers": {
"krova": {
"command": "npx",
"args": ["-y", "@krovacloud/mcp"],
"env": {
"KROVA_API_KEY": "kro_your_api_key_here",
"KROVA_SPACE_ID": "space_optional_default"
}
}
}
}
claude mcp list で確認します。
Cursor
プロジェクト内に .cursor/mcp.json を作成します(すべてのプロジェクトで使う場合は ~/.cursor/mcp.json)。
{
"mcpServers": {
"krova": {
"command": "npx",
"args": ["-y", "@krovacloud/mcp"],
"env": {
"KROVA_API_KEY": "kro_your_api_key_here",
"KROVA_SPACE_ID": "space_optional_default"
}
}
}
}
次に、Cursor Settings → MCP で krova サーバーを有効にします。
その他の MCP クライアント
stdio 経由で MCP を通信するクライアントであれば利用できます。環境変数を設定して、npx -y @krovacloud/mcp を起動してください。上記の設定形式は、VS Code(Copilot)、Windsurf、Zed、および MCP SDK を使用して構築されたカスタムエージェントでも利用できます。
設定
サーバーは環境変数のみで設定します。
| 変数 | 必須 | 説明 |
|---|---|---|
KROVA_API_KEY | はい | Krova Cloud API キー(kro_...)です。特定の Space にスコープされ、作成したメンバーシップの権限を継承します。 |
KROVA_SPACE_ID | いいえ | デフォルトの Space ID です。Cube ツールで spaceId を省略できます。 |
KROVA_BASE_URL | いいえ | API のベース URL を上書きします(デフォルトは Krova Cloud の本番 API です)。 |
ツール
全 37 個のツールと、それぞれのパラメーターおよび機能です。KROVA_SPACE_ID が設定されている場合、すべてのツールで spaceId は省略可能です。
| ツール | パラメーター | 説明 |
|---|---|---|
list_cubes | spaceId? | Space 内のすべての Cube(Firecracker microVM)を一覧表示します。 |
get_cube | spaceId?, cubeId | ID を指定して、単一の Cube の詳細を取得します。 |
get_cube_ssh | spaceId?, cubeId | SSH 用のホスト、ポート、ログインユーザー、固定されたホストキーを取得します。host は Cube 自体の安定した SSH ホスト名であり、サーバーの IP ではありません。別のサーバーに移行しても変わりません。Cube に DNS レコードがまだない場合に限り、サーバーのパブリック IPv4 アドレスにフォールバックします。ユーザー名を推測せず、こちらを呼び出してください。新しい Cube では ubuntu/debian、古い Cube では root であり、イメージ ID から判別することはできません。 |
create_cube | spaceId?, name, image, vcpu, ramGb, diskGb, sshPublicKey, region?, userData? | 新しい Cube をプロビジョニングします。非同期処理です。返される Cube は保留状態で開始します。課金対象です。破壊的操作です。 |
power_off_cube | spaceId?, cubeId | 実行中の Cube の電源を切ります(コンピューティングリソースとホスト RAM を解放し、ディスクは保持します)。非同期処理です。 |
wake_cube | spaceId?, cubeId | 停止中の Cube を起動します。非同期処理です。 |
restart_cube | spaceId?, cubeId | 実行中の Cube を再起動します。これはコールド再起動です。Cube はホストの現在のカーネルで起動するため、更新されたゲストカーネルを適用する唯一の方法です(Cube 内で reboot を実行しても適用されず、エラーも報告されません)。ディスクの状態は保持されます。非同期処理です。同時に実行された再起動はキューに入らず、拒否されます。 |
delete_cube | spaceId?, cubeId | Cube を削除します。非同期処理です。削除はキューに入れられます。破壊的操作です。 |
protect_cube | spaceId?, cubeId | 終了保護を有効にします。無効にするまで delete_cube は 409 で拒否されます。電源オフ、起動、再起動、スナップショット、復元は引き続き実行できます。冪等です。 |
unprotect_cube | spaceId?, cubeId | 終了保護を無効にし、再び delete_cube を実行できるようにします。冪等です。 |
list_regions | — | 利用可能な容量があるリージョンを一覧表示します。 |
list_images | — | 新しい Cube で利用できる OS イメージを一覧表示します。 |
get_pricing | — | リソースごとの時間単位の料金とボリューム料金の区分を取得します。 |
list_domains | spaceId?, cubeId | Cube に紐付けられたカスタムドメインを一覧表示します。 |
get_domain_records | spaceId?, cubeId, mappingId | ドメインに必要な DNS レコードを一覧表示し、それぞれを実際の DNS で確認します。missing はまだ公開されていないことを意味します(ユーザーがレコードを作成する前は想定どおりであり、エラーではありません)。すべてのレコードが見つかると summary.complete が true になります。実際の DNS ルックアップを行います。レート制限があります。 |
create_domain | spaceId?, cubeId, domain, port, originScheme?, proxyProtocol?, confirmMixedProxyProtocol? | Cube にカスタムドメインを紐付けます。ドメインと、公開する DNS レコードを返します。内容をそのまま伝えてください。 |
update_domain | spaceId?, cubeId, mappingId, originScheme?, proxyProtocol?, confirmMixedProxyProtocol? | ドメインのプロキシ設定を変更します。オリジンスキームと、Cube への各接続で訪問者を識別する PROXY プロトコルヘッダー(v1、v2、または off)を設定します。少なくとも 1 つを指定してください。省略した設定は現在の値が維持されます。 |
delete_domain | spaceId?, cubeId, mappingId | カスタムドメインの紐付けを解除します。破壊的操作です。 |
list_snapshots | spaceId?, cubeId | Cube のディスクスナップショットを一覧表示します。 |
create_snapshot | spaceId?, cubeId, name? | Cube のディスクのスナップショットを作成します。非同期処理です。 |
delete_snapshot | spaceId?, cubeId, snapshotId | スナップショットを削除します。破壊的操作です。 |
restore_cube | spaceId?, cubeId, snapshotId | スナップショットから Cube のディスクを復元します。ディスクを置き換えます。破壊的操作です。 |
list_backups | spaceId? | Space のバックアップを新しい順に一覧表示します。sharedFromBackupId は、別の Space から共有されたコピーの場合に設定されます。 |
get_backup | spaceId?, backupId | 1 つのバックアップを取得します。 |
share_backup | spaceId?, backupId, destinationSpaceId | バックアップのコピーを別の Space に共有します。コピーされるのは、共有先が 48 時間以内に承認してからです。コピーはその後、共有先独自のものとなり、共有先に課金されます。破壊的操作です(ディスクのコピーを別の Space に渡します)。 |
list_backup_shares | spaceId? | Space への共有(incoming)と Space からの共有(outgoing)のうち、保留中のものを一覧表示します。 |
accept_backup_share | spaceId?, shareId | Space に共有されたバックアップを承認します。以後、コピーのバックアップストレージ料金は Space に課金されます。破壊的操作です(料金が発生します)。 |
decline_backup_share | spaceId?, shareId | Space に共有されたバックアップを辞退します。コピーは作成されません。 |
cancel_backup_share | spaceId?, shareId | Space から共有した保留中の共有を取り消します。 |
list_tcp_mappings | spaceId?, cubeId | Cube の TCP ポートマッピングを一覧表示します。 |
create_tcp_mapping | spaceId?, cubeId, cubePort, whitelistedIps? | Cube の TCP ポートをホスト上で公開します。非推奨のエイリアスである whitelistIps も引き続き使用できます。 |
delete_tcp_mapping | spaceId?, cubeId, mappingId | TCP ポートマッピングを削除します。破壊的操作です。 |
list_webhooks | spaceId? | Space 内の Webhook エンドポイントを、イベントと各エンドポイントの有効/無効状態とともに一覧表示します。 |
get_webhook | spaceId?, endpointId | 1 つの Webhook エンドポイントを取得します。署名シークレットはここでは返されません。 |
create_webhook | spaceId?, url, events, description? | Webhook エンドポイントを作成します。署名シークレットが返されるのはこのレスポンスのみです。すぐに保存してください。 |
delete_webhook | spaceId?, endpointId | Webhook エンドポイントとその配信履歴を削除します。破壊的操作です。 |
list_webhook_deliveries | spaceId?, endpointId, limit? | エンドポイントへの過去 30 日間の配信試行を新しい順に一覧表示します(最大 100 件)。 |
すべてのツールは MCP アノテーションを公開するため、クライアントは適切に扱うことができます。16 個の読み取りツール(list_cubes、get_cube、get_cube_ssh、list_regions、list_images、get_pricing、list_domains、get_domain_records、list_snapshots、list_backups、get_backup、list_backup_shares、list_tcp_mappings、list_webhooks、get_webhook、list_webhook_deliveries)は読み取り専用としてマークされ、9 個の破壊的なツール(create_cube、delete_cube、delete_domain、delete_snapshot、restore_cube、share_backup、accept_backup_share、delete_tcp_mapping、delete_webhook)は破壊的としてマークされています。update_domain は変更を加えますが、冪等で元に戻せるため、破壊的とはマークされていません。ほとんどの MCP クライアントは、破壊的なツールを実行する前に確認プロンプトを表示します。信頼できないコンテンツによって LLM がツールを呼び出すよう誘導される可能性があるため、この確認は有効にしたままにしてください。 |
バックアップツールを使用するには、API キーのメンバーに Backups 権限が必要です。読み取りには View Backups、共有と共有への応答には Manage Backups が必要です。意図的にダウンロードツールは用意していません。ダウンロードリンクは追加の認証なしでディスク全体を取得するものであり、モデルとの会話で扱うべきではないためです。CLI から krova backups download を使用してください。
create_cube のパラメーター
| パラメーター | 型 | 備考 |
|---|---|---|
name | string | 人が読みやすい Cube 名です。 |
image | string | OS イメージのスラッグです。list_images を参照してください。ubuntu-24.04、ubuntu-24.04-docker、debian-13、または debian-13-docker を指定します。 |
region | string? | 省略可能なリージョンのスラッグです。list_regions を参照してください。省略すると、Krova Cloud が容量のあるリージョンを自動選択します。 |
vcpu | integer | 仮想 CPU の数です。Space ごとの既定の上限は 16 です(Space の上限は引き上げ可能です)。 |
ramGb | integer | GiB 単位の RAM 容量です。Space ごとの既定の上限は 32 GB です(Space の上限は引き上げ可能です)。 |
diskGb | integer | GiB 単位のディスク容量です。最小 10 で、5 刻みです。Space ごとの既定の上限は 100 GB です(Space の上限は引き上げ可能です)。 |
sshPublicKey | string | 起動時に /root/.ssh/authorized_keys に書き込まれます(ssh-ed25519、ssh-rsa、ecdsa-sha2-* など)。API で必須です。 |
userData | string? | 省略可能な cloud-init スクリプトです(最大 16 KiB。上限は強制されます)。 |
呼び出しが成功すると、API の JSON レスポンスがテキストとして返されます。API エラーは、HTTP ステータス、API メッセージ、および利用可能な場合はリクエスト ID を含む MCP エラー結果として返されます。
認証
Krova Cloud API キーが必要です。Krova Cloud ダッシュボードの Space 設定から作成してください。キーはSpace ごとにスコープが設定され、作成したメンバーの権限を引き継ぎ、kro_... の形式です。
キーをコミットしたり、ログ、課題、チャットに貼り付けたりしないでください。公開された可能性があるキーはローテーションしてください。SECURITY.mdを参照してください。
要件
- Node.js ≥ 18(基盤となる SDK はグローバルの
fetchを使用します)。 - MCP 対応クライアント(Claude Desktop、Claude Code、Cursor、または独自のエージェント)。
関連パッケージ
Krova Cloud 開発者ツールキットの一部です。
@krovacloud/sdk— このサーバーの基盤となっている公式 TypeScript SDK です。- Krova Cloud のドキュメントとダッシュボード — ホストされている API ドキュメント、OpenAPI 仕様、および API キーを取得する場所です。
コントリビューション
CONTRIBUTING.mdを参照してください。src/tools.ts のツールレジストリが唯一の信頼できる情報源です。defineTool(...) を追加し、tests/ でテストを作成して、上の表を更新してください。PR を作成する前に、pnpm typecheck、pnpm test、pnpm build を実行してください。
ライセンス
MIT © 2026 Krova Inc.
公式 MCP Registry への公開
このサーバーは cloud.krova/mcp として登録されています。
CI はリリースのたびに自動で再公開します。.github/workflows/ci-release.yml の Publish MCP server
to the official registry ステップを参照してください。
リポジトリシークレット MCP_PRIVATE_KEY が 1 つ必要です。 これが設定されていない場合、ステップはスキップしたことをログに記録して何も実行しないため、リリースが妨げられることはありません。
値には、krova.cloud の apex に TXT レコードとして公開されている公開鍵の秘密鍵から導出した、Ed25519 秘密鍵の生の 16 進数を指定します。
openssl pkey -in key.pem -noout -text | grep -A3 'priv:' | tail -n +2 | tr -d ' :\n' | pbcopy
⚠️ ターミナルで直接読むのではなく、pbcopy にパイプしてください。このコマンドは末尾に改行を出力しないため、zsh は末尾に % を表示します。これを目視でコピーするとシークレットに混入し、パブリッシャーが invalid hex private key format: ... invalid byte: U+0025 '%' で失敗します。CI では 16 進数以外の文字を取り除き、長さが 64 であることを確認するようになったため、同じ問題が再発することはありません。
⛔ シークレットが必要なのは、名前空間が理由です。 mcp-publisher login github-oidc にシークレットは不要ですが、付与されるのは io.github.<org>/* のみです。これを利用すると cloud.krova/mcp を放棄し、新しい名前で再公開して、稼働中のエントリを孤立させることになります。このブランド名前空間は意図的に選ばれています。
手動で実行する
pnpm publish:mcp-registry --dry-run # derives the version, writes and publishes nothing
pnpm publish:mcp-registry
スクリプトはバージョンを npm から読み取り、server.json は参照しません。また、レジストリですでにそのバージョンが配信されている場合は、早期に終了します。これは意図的な動作です。保存された番号は信頼できません。release.mjs は npm の最新バージョンからパッチバージョンを上げますが、CI はその更新をコミットし直さず、server.json はパッケージの files リストに含まれていないため tarball にも含まれません。古いバージョンを公開しても、エラーなしで失敗します。レジストリが確認するのは、そのバージョンが mcpName マーカー付きで npm に存在することだけで、最新であるかどうかは確認しません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。