mcpField
H
Hostim

Hostim

ローカル
hostim.devクラウド・インフラ11 日前に更新

Hostim について

Hostim CLIは、ターミナルやCIからHostim.devのリソースを管理する開発者・運用向けコマンドラインツールです。公開REST APIを使ってプロジェクト、アプリ、データベース、ボリューム、ドメインを操作でき、JSON出力とエージェントが読める内蔵マニュアルを備えています。

主な機能

  1. 01プロジェクトとアプリのデプロイ管理
  2. 02MySQL、Postgres、Redisの管理
  3. 03ボリューム、ドメイン、環境変数の設定
  4. 04ステータス、ログ、イベントの確認
  5. 05JSON出力と内蔵エージェントマニュアル

活用シーン

  1. 01GitリポジトリやDockerイメージからのアプリデプロイ
  2. 02CIでのデプロイとリソース操作
  3. 03アプリの状態調査と実行ログの確認
  4. 04プロジェクトテンプレートのエクスポートと別プロジェクトへの適用

MCP 対応

READMEには`mcp`コマンドの記載がありますが、MCP連携の方法やMCPクライアントに提供する機能は説明されていません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"hostimdev-hostim": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"HOSTIM_TOKEN",
"ghcr.io/hostimdev/cli:v0.1.54"
],
"env": {
"HOSTIM_TOKEN": "<HOSTIM_TOKEN>"
}
}
}
}
起動コマンドdocker run -i --rm -e HOSTIM_TOKEN ghcr.io/hostimdev/cli:v0.1.54
設定が必要な環境変数
HOSTIM_TOKENシークレットHostim API token. Create one in the console under Account Settings → API Tokens.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/hostimdev/cli:v0.1.54

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

hostim CLI

Hostim.dev クラウドプラットフォーム用のコマンドラインインターフェイスです。 パブリック REST API(https://api.hostim.dev)を利用して、ターミナルまたは CI パイプラインからプロジェクト、アプリ、データベース(MySQL / Postgres / Redis)、ボリューム、ドメインを作成・管理できます。

このファイルは完全なマニュアルです。バイナリにも同じテキストが含まれており、hostim agent を実行すると標準出力に表示されます。そのため、エージェントやスクリプトはネットワークに接続せずにマニュアル全体を読み取れます。

コマンド、フラグ、出力、API レスポンスは、リリースによって変更される場合があります。アップグレードする前にリリースノートを確認してください。

目次

インストール

curl -fsSL https://raw.githubusercontent.com/hostimdev/cli/main/install.sh | sh

このスクリプトは、現在の OS とアーキテクチャ(Linux と macOS、amd64 と arm64)に対応するリリースバイナリをダウンロードし、/usr/local/bin にインストールします。このディレクトリに書き込めない場合は sudo を使用します。書き込みができず、sudo もインストールされていない場合(たとえば通常のコンテナ)は、~/.local/bin に切り替え、そのディレクトリが PATH に含まれていない場合は通知します。場所を自分で指定するには、PREFIX を設定してください。

curl -fsSL https://raw.githubusercontent.com/hostimdev/cli/main/install.sh | PREFIX=$HOME/.local sh

エージェントや CI ポリシーによっては、ダウンロードしたスクリプトをシェルにパイプすることが許可されていません。スクリプトの使用は必須ではありません。Homebrew(macOS および Linux)を使用できます。

brew install hostimdev/tap/hostim

または npm(Node 18 以降)を使用できます。npx は初回実行時に、ご利用のプラットフォーム向けのリリースバイナリをダウンロードし、リリースのチェックサムと照合して検証したうえでキャッシュします。

npx -y hostim version
npm install -g hostim   # or install it once and run `hostim`

または、リリースバイナリを直接取得できます。

VERSION=$(curl -fsSL https://api.github.com/repos/hostimdev/cli/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d'"' -f4)
curl -fsSL "https://github.com/hostimdev/cli/releases/download/${VERSION}/hostim_linux_amd64.tar.gz" | tar -xz hostim
install -m 0755 hostim /usr/local/bin/hostim   # or anywhere on your PATH

代わりにソースからビルドすることもできます(Go 1.26 以降)。

git clone https://github.com/hostimdev/cli && cd cli
make build           # writes bin/hostim
make install         # installs into /usr/local/bin (PREFIX to change)

インストールを確認します。

hostim version

ログイン

hostim login はデバイスコードを使用します。URL と短いコードが表示されるので、ブラウザーでリクエストを承認すると、トークンが自動的に保存されます。

hostim login

hostim login は承認されるまでポーリングし、トークンを自動的に保存します。そのため、待機ループを用意したり、コマンドをもう一度実行したりする必要はありません。ブラウザーでの操作にターミナルは不要なので、エージェントに hostim login を実行させ、表示されたコードを見せてもらうことができます。すでにトークンをお持ちの場合は、代わりに直接保存してください。ダッシュボード(https://console.hostim.dev)でトークンを作成できます。

hostim login --token-value "$T"   # non-interactive, for scripts and CI

login は、トークンを ~/.config/hostim/config.yml に保存する前に API に対して検証します(モード 0600)。CI では login を省略し、代わりに HOSTIM_TOKEN をエクスポートしてください。ファイルは書き込まれません。

ほとんどのコマンドは、1 つのプロジェクトを対象に動作します。デフォルトを一度設定してください。

hostim projects ls
hostim use my-project
hostim whoami                     # token source, current project, project count

設定

値は フラグ → 環境変数 → 設定ファイル の順に解決されます。API URL には組み込みのデフォルト値が用意されています。

値フラグ環境変数設定キー
API トークン--tokenHOSTIM_TOKENtoken
API ベース URL--api-urlHOSTIM_API_URLapiUrl(デフォルト https://api.hostim.dev)
対象プロジェクト-p、--projectHOSTIM_PROJECTcurrentProject。hostim use で設定

設定ファイルは ~/.config/hostim/config.yml にあります。ただし、XDG_CONFIG_HOME が設定されている場合は $XDG_CONFIG_HOME/hostim/config.yml にあります。

token: ...                 # written by `hostim login`
currentProject: my-project # written by `hostim use`
apiUrl: https://api.hostim.dev  # only written when --api-url was passed

プロジェクトとアプリは、どこでも名前または ID で指定できます。

グローバルフラグ

すべてのコマンドで使用できます。

--token string      API token (overrides HOSTIM_TOKEN and config)
--api-url string    API base URL (default https://api.hostim.dev)
-p, --project       project to target (overrides HOSTIM_PROJECT and current project)
-o, --output        output format: table or json (default "table")
-h, --help          help for the command
-v, --version       version (root command only)

破壊的なコマンド(rm、templates apply)では確認を求められます。確認を省略するには -y / --yes を指定してください。

出力と終了コード

デフォルトの出力は、人が読むための整列されたテキストテーブルです。-o json を指定すると、すべてのコマンドが機械可読な出力に切り替わります。スクリプトやエージェントにはこちらが適しています。

  • 読み取りコマンドは、API オブジェクトまたはリストをインデント付きの JSON で出力します。
  • 書き込みコマンドは、実行内容を示す単一の結果オブジェクトを出力します。例:{"status":"created","kind":"app","name":"web"} または {"status":"ok","kind":"env","set":1}。
  • 失敗時は、JSON オブジェクトをstderrに出力します。例:{"status":"error","error":"..."}。終了コードはゼロ以外になります。コマンドの要件が複数不足している場合は、オブジェクトに不足している項目をまとめた "missing" 配列が含まれます。

終了コード:

コード意味
0成功
1CLI または API のエラー、あるいは確認の中断
その他hostim exec はリモートコマンドの終了ステータスをそのまま返します

コマンドリファレンス

以下の各例は、トークンとプロジェクトを設定すれば、そのまま実行できます。

login, logout, whoami, use
hostim login                          # device login: approve a code in the browser
hostim login --token-value "$TOKEN"   # store an existing API token instead
hostim logout                         # remove the stored token
hostim whoami                         # API URL, token source, current project
hostim whoami -o json
hostim use my-project                 # set the default project (verifies it exists)
hostim use my-project --force         # skip the check (offline)
hostim use --clear                    # unset the default project
projects
hostim projects ls                            # aliases: project, proj; ls | list
hostim projects get my-project
hostim projects create my-project --region eu-center
hostim projects rm my-project -y
hostim projects export -p prod -f prod.yml    # template YAML for `templates apply`
hostim projects export -p prod -o json        # template as JSON on stdout

作成時は --region が必須です。指定できる値は hostim regions ls を参照してください。

projects export が書き出すのは、バックアップではなく、望ましい状態を表すテンプレートです。ボリュームとデータベースの内容(データ)はエクスポートされません。このデータは定期的にバックアップされます。Postgres と MySQL のデータベースおよびボリュームについては、バックアップ(hostim backups)を参照してください。コスト、ID、組み込みドメイン、未使用のソースブロックは除外されます。環境変数の値は RAW のままエクスポートされます。ファイルにはパスワードや API キーなどのシークレットが含まれるため、パスワードファイルと同様に保管し、共有してください。Docker レジストリのパスワードと Git トークンは API 経由で読み取れないため、エクスポートから除外されます(レジストリのユーザー名は保持されます)。適用後に再設定してください。 hostim templates apply -f prod.yml --new-project prod-clone で再デプロイします。

deploy

hostim deploy <app> は、アプリが存在しない場合は --git または --docker-image から作成し、すでに存在する場合はソースを更新して再ビルドを開始します。ビルドの完了を待ち、ビルドが失敗するとゼロ以外の終了コードで終了するため、そのままパイプラインに組み込めます。hostim apps deploy も同じコマンドです。

# first deploy from a git repo
hostim deploy web \
  --git https://github.com/me/app --branch main \
  --plan sa-1-1 --port 8080 \
  --health-check-path /healthz \
  --env LOG_LEVEL=debug --env-file .env

# redeploy: source is unchanged, just rebuild
hostim deploy web

# deploy a docker image and do not wait
hostim deploy web --docker-image ghcr.io/me/app:latest --wait=false

# private registry: the registry host goes inside the image reference
hostim deploy web --docker-image registry.example.com/me/app:1.2.3 \
  --docker-user ci --docker-pass "$REG_PASS"

# private git repo
hostim deploy web --git https://github.com/me/private --git-token "$GH_TOKEN"

# mount a volume and attach a domain on create
hostim deploy web --docker-image nginx --plan sa-1-1 --port 80 \
  --volume data:/var/lib/app --domain app.example.com

フラグ:

--git string                 git repository URL
--branch string              git branch
--dockerfile string          path to the Dockerfile in the repo; its directory is the build context
--git-token string           token for private git repos
--docker-image string        docker image reference, registry host included
--docker-user string         docker registry username
--docker-pass string         docker registry password
--plan string                app plan (required when creating)
--port int                   HTTP port (on create; required unless --public=false)
--public                     expose the app publicly (on create) (default true)
--replicas int               number of replicas (on create) (default 1)
--domain stringArray         custom domain (repeatable, on create)
--volume stringArray         mount a volume as name:mountPath (repeatable)
--env stringArray            environment variable as KEY=VALUE (repeatable, merges)
--env-file string            read environment variables from a .env file (merges)
--command string             override the container command (empty value restores the image default)
--health-check-path string   HTTP path for the readiness probe (empty value disables it)
--wait                       wait for the build to finish (default true)
--timeout duration           max time to wait for the build (default 15m0s)
--poll-interval duration     status poll interval (default 3s)

プラン ID はリソースの種類ごとに割り当てられ、sa-1-1(共有アプリ、1 コア、RAM 1 GB)のような形式です。リージョンで利用できるプランは hostim regions pricing <region> --for apps で一覧表示できます。

deploy が扱うのは 1 つのアプリです。データベース、Redis、またはボリュームも必要なアプリは、テンプレートとしてデプロイします。テンプレートを参照してください。

apps
hostim apps ls                    # aliases: app; ls | list; `hostim apps` alone does the same
hostim apps get web
hostim apps status                # health table for every app in the project
hostim apps status web
hostim apps rebuild web           # rebuild from the current source
hostim apps restart web           # restart the running containers
hostim apps rm web -y             # aliases: delete, remove
status, logs, events, overview
hostim status                          # every app in the project
hostim status web                      # one app: build + runtime status
hostim status -o json

hostim logs web                        # last 100 lines, oldest first
hostim logs web -f                     # stream new lines
hostim logs web -n 500                 # 1-10000 lines
hostim logs web --since 2h             # every line of the last 2 hours (up to 10000)
hostim logs web --since 2026-10-14T14:00 --until 2026-10-14T14:10   # one time window
hostim logs web --since 1h | grep -i error   # search
hostim logs web --build --since 1h     # build logs (git-built apps only)

# Logs cover stdout and stderr of every container the app ran in the last
# 7 days, so lines from before a redeploy or a crash are still there.

hostim events web                      # status history: why the app changed state
hostim events web -f                   # keep printing new events
hostim events web -n 20

hostim overview                        # every resource in every project + cost
hostim overview my-project             # alias: resources

status は現在の値を表示し、events はその状態に至った経緯を表示します。アプリが異常な状態になった後に復旧した場合は、events を確認してください。--build は Git からビルドされたアプリで使用できます。ビルド済みの Docker イメージを実行するアプリには、ビルドログがありません。

env

環境変数は、1 つのアプリ(-a/--app)またはプロジェクト全体(--global)のいずれかに属します。アプリはグローバルに設定された環境変数と、そのアプリ固有の環境変数を参照できます。

hostim env get -a web
hostim env get --global -o json
hostim env set KEY=VALUE OTHER=2 -a web       # merges with existing vars
hostim env set SENTRY_DSN=... --global
hostim env rm KEY OTHER -a web
hostim env pull -a web --file .env            # write to a file (- for stdout)
hostim env push -a web --file .env            # load from a file, merging
hostim env push -a web --file .env --replace  # replace the whole set

環境変数を変更すると、アプリが再起動します。

同じプロジェクト内の別のアプリに接続するには、HTTP ポートで内部 DNS 名 app-<name>-service を使用します。例:API_URL=http://app-api-service:8080。hostim status <app> では「Internal DNS」として表示されます。HTTP ポートのないアプリには、内部 DNS 名がありません。

値には $(...) を使ってデータベース変数を参照できます。DSN などの長い値の一部としても使用できます。これらはコンテナーの起動時に展開されるため、hostim env get ではリテラル文字列が表示されます。すべての変数名については、envVars のプレースホルダーを参照してください。

hostim env set -a web \
  'DATABASE_URL=mysql://$(MAIN_MYSQL_USER):$(MAIN_MYSQL_PASSWORD)@$(MAIN_MYSQL_HOST):$(MAIN_MYSQL_PORT)/$(MAIN_MYSQL_DATABASE)'
domain
hostim domain add app.example.com -a web    # prints the DNS record to create
hostim domain status web                    # domains + DNS/certificate state
hostim domain rm app.example.com -a web -y

表示されたレコードを DNS プロバイダーに追加し、ドメインがアクティブと表示されるまで hostim domain status を再実行してください。証明書は自動的に発行されます。

exec

アプリのコンテナ内でコマンドを実行します。コマンドを指定しない場合は、対話型シェルを開きます。接続はプロジェクトの SSH 踏み台サーバーを経由するため、プロジェクトで公開 SSH キーを許可する必要があります。プロジェクトに対して初めて hostim exec を実行すると、キーを追加するかどうかを確認されます。確認なしで追加するには -y を渡します。スクリプトや CI ジョブではこのオプションが必要です。

hostim exec web                                   # interactive shell
hostim exec web -- rails c                        # one-off command
hostim exec web -- sh -c 'ls -la /var/www | head'
hostim exec web -- cat /tmp/app.log               # read a file the app does not log
cat dump.sql | hostim exec --stdin db -- psql app # pipe local data in
hostim exec web -i ~/.ssh/id_ed25519 -- env       # pick the SSH key
hostim exec -y web -- ./migrate.sh                 # no prompts, for CI

エイリアス:shell、ssh。リモートコマンドの終了ステータスが hostim exec の終了ステータスになります。

db

3 つのエンジンで同じ形式のコマンドを使用できます:hostim db mysql|postgres|redis ls|get|create|credentials|status|rm。pg は postgres のエイリアスです。

hostim db postgres ls
hostim db postgres create main --plan sp-1
hostim db postgres get main
hostim db postgres status main
hostim db postgres credentials main -o json   # hostname, port, username, password, database
hostim db postgres rm main -y

hostim db mysql ls
hostim db mysql create app --plan sm-1
hostim db mysql get app
hostim db mysql status app
hostim db mysql credentials app -o json
hostim db mysql rm app -y

hostim db redis ls
hostim db redis create cache --plan sr-1
hostim db redis get cache
hostim db redis status cache
hostim db redis credentials cache -o json
hostim db redis rm cache -y

作成時には --plan が必要です。プラン ID はエンジンごとに異なります。Postgres は sp-*、MySQL は sm-*、Redis は sr-* です。hostim regions pricing <region> --for postgres|mysql|redis で、ストレージ容量と料金とともにプランを一覧表示できます。

Postgres 拡張機能:

hostim db postgres extensions ls              # what a database can request (alias: ext)
hostim db postgres extensions add main postgis pg_trgm

プレーン SQL ダンプ(pg_dump --format=plain)を読み込みます。プロジェクトの SSH 踏み台サーバーを経由して psql に渡されます。SQL エラーは表示され、件数も記録されますが、読み込みは中断されません。他のホストから取得したダンプには、無害なエラー(イベントトリガー、拡張機能の所有者、不明な設定など)がいくつか含まれるためです。psql がダンプをまったく実行できない場合(接続できない場合など)に限り、ゼロ以外の終了ステータスになります。exec と同様に、SSH キーの許可を求められます。確認なしで追加するには -y を指定します。

hostim db postgres import main -f dump.sql
hostim db postgres import main -y < dump.sql

認証情報をアプリの環境変数にまとめて読み込むには、次のコマンドを実行します。

hostim db postgres credentials main -o json \
  | jq -r '"DATABASE_URL=postgres://\(.username):\(.password)@\(.hostname):\(.port)/\(.database)"' \
  | xargs hostim env set -a web
volumes
hostim volumes ls                                   # aliases: volume, vol
hostim volumes get data
hostim volumes create data --plan vol-1
hostim volumes rm data -y

プランによってサイズが決まります(vol-1 は 5 GB)。hostim regions pricing <region> --for volume でプランを一覧表示できます。

hostim deploy <app> --volume data:/var/lib/app を使って、アプリにボリュームをマウントします。

backups
hostim backups                        # schedule, retention and last backup per resource
hostim backups create                 # start a manual backup of the whole project
hostim backups create data --wait     # back up one resource and wait for it to finish
hostim backups ls data                # the backups of one database or volume, newest first
hostim backups ls main --kind postgres   # skip the kind lookup
hostim backups download 1a2b3c4d               # prepare, then download
hostim backups download --latest data          # the newest backup of one resource
hostim backups download 1a2b3c4d -f -           # write to stdout (no resume)

hostim backups は、すべてのデータベースとボリュームについて、最終バックアップの時刻をスケジュールと保持ポリシーとともに一覧表示します。時刻はローカルのタイムゾーンで表示されます。hostim backups create は手動バックアップを開始します。リソースを指定しない場合は、プロジェクト全体をバックアップします。--wait を指定すると、実行が完了するまでポーリングし、成功しなかった場合はゼロ以外の終了ステータスになります。hostim backups ls では圧縮前のデータサイズが表示されます。 ダウンロードされるファイルはこれより小さくなります。hostim backups ls にはリソース名が必要です。データベースとボリュームの名前が重複している場合は、--kind postgres|mysql|volume を指定してください。hostim backups download --latest <resource> を使うと、ID の検索を省略して最新のバックアップを取得します。hostim backups download は、まずファイルを準備してからダウンロードします。大きなバックアップでは準備に数分かかることがあります。転送が中断された場合は、同じコマンドを再実行してください。ディスク上の部分ファイル <file>.part から再開します。-f - を指定すると標準出力に書き込みますが、再開はできません。

ダウンロードファイルは zstd で圧縮されています。データベースのバックアップは .sql.zst ファイルです(zstd -d <file> で展開)。ボリュームのバックアップは .tar.zst アーカイブです(tar --zstd -xf <file> で展開すると、ボリューム名のフォルダーに展開されます)。

templates

テンプレートは、ボリューム、データベース、Redis、アプリを含むスタック全体を記述した 1 つの YAML ファイルです。apply は依存関係の順に各リソースを作成し、完了を待ちます。

hostim templates ls                        # curated templates (aliases: template, tpl)
hostim templates show freshrss

# deploy a curated template into the current project
hostim templates apply --id freshrss

# deploy into a brand new project
hostim templates apply --id freshrss --new-project blog --region eu-center

# save it as YAML, edit, then deploy the edited file
hostim templates apply --id freshrss --save stack.yml
hostim templates validate -f stack.yml     # offline check, no API calls
hostim templates apply -f stack.yml -y

# convert a docker-compose file into a template
hostim templates apply --compose docker-compose.yml --save stack.yml
hostim templates apply --compose docker-compose.yml

# a file holding a list of templates: pick one entry
hostim templates apply -f templates.yml --id freshrss

apply は作成するリソースを表示し、確認を求めます(-y を指定すると省略できます)。対象プロジェクトにすでに存在するリソースがある場合は、何も作成する前に中止します。そのため、設定済みまたはスケール済みのリソースが上書きされることはありません。--skip-existing を指定すると、不足しているリソースだけを作成します。

テンプレートに含まれるカスタムドメインは、すべてのリソースが起動した後にのみ割り当てられます。別のプロジェクト(たとえば、テンプレートのエクスポート元のプロジェクト)がすでに使用しているドメインは、ドメインごとに通知されますが、残りの適用処理は成功します。後から hostim domain add <domain> --app <app> で追加してください。

apply のフラグ:

--id string                curated template ID, or the entry to pick out of a -f list
-f, --file string          local template YAML file to deploy
--compose string           docker-compose file to convert and deploy
--save string              write the resolved template to a YAML file instead of deploying
--new-project string       create a new project with this name before deploying
--region string            region for --new-project (defaults to the only region when there is one)
--skip-existing            skip resources that already exist instead of aborting
--wait                     wait for each resource to become ready (default true)
--timeout duration         max time to wait per resource (default 15m0s)
--poll-interval duration   status poll interval (default 3s)
-y, --yes                  skip the confirmation prompt
regions
hostim regions ls                                  # aliases: region
hostim regions get eu-center
hostim regions pricing eu-center                   # app plans (default)
hostim regions pricing eu-center --for postgres    # apps, mysql, postgres, redis, volume

リソースを作成する前に、使用可能な --plan と --region の値を確認するには、これを使います。

completion
hostim completion bash > /etc/bash_completion.d/hostim
hostim completion zsh > "${fpath[1]}/_hostim"
hostim completion fish > ~/.config/fish/completions/hostim.fish
hostim completion powershell | Out-String | Invoke-Expression
agent
hostim agent            # print this manual to stdout
hostim agent > CLI.md

バイナリにはこの README が埋め込まれているため、エージェントが読むマニュアルは、インストール済みバージョンに同梱されているものとまったく同じです。Hostim コマンドを作成する前にコーディングエージェントに読み込ませれば、フラグを推測することはなくなります。

スキルを読み込むエージェント(Claude Code など)向けには、同じ知識がスキルとしても提供されています:skills/hostim/SKILL.md。リポジトリ内の .claude/skills/hostim/SKILL.md に配置するか、インストーラーに設定させてください:

curl -fsSL https://hostim.dev/agent.sh | sh

これにより CLI がインストールされ、スキルが書き込まれ、AGENTS.md からスキルが参照されます。

mcp
hostim mcp                      # Model Context Protocol server on stdio, read-only
hostim mcp --allow-write        # also expose tools that create, change and delete

hostim mcp は標準入力/標準出力で Model Context Protocol を使用するため、コーディングエージェントはツールとして Hostim のリソースを確認し、プロビジョニングできます。他のすべてのコマンドと同じバイナリ、同じトークン、同じ公開 API を使用します。

読み取り専用ツールは常に利用できます:list_projects、list_apps、get_app、get_app_status、get_app_logs、get_app_events、list_databases、get_database_credentials、list_volumes、list_backups、list_regions、list_templates、list_region_plans。プロジェクト、アプリ、データベース、ボリューム、環境変数、ドメイン、バックアップの作成・変更・削除やバックアップのダウンロードを行うツールは、--allow-write を指定した場合にのみ登録されます。

MCP クライアントから接続してください。Claude Desktop の場合は、claude_desktop_config.json に次のように設定します:

{
  "mcpServers": {
    "hostim": {
      "command": "hostim",
      "args": ["mcp", "--allow-write"],
      "env": { "HOSTIM_TOKEN": "your-api-token" }
    }
  }
}

Cursor、VS Code、その他の MCP クライアントでも、同じ command + args の形式を使用します。

CLI を使わずにインストールすることもできます。最新リリースから hostim.mcpb をダウンロードして開いてください。Claude Desktop がトークンと変更を許可するかどうかを尋ねます。 トークンは他のすべてのコマンドと同じ場所から取得されるため、env を省略して hostim login で保存したトークンを使うこともできます。

version
hostim version          # hostim version v1.2.3
hostim --version        # same thing

テンプレートファイル

テンプレートファイルには、テンプレートオブジェクトを 1 つ、または複数のテンプレートオブジェクトのリストを指定します。フィールド名は API の JSON(キャメルケース)と一致します。最小限の例:

id: my-stack
name: My stack
description: A web app with a Postgres database and a volume
components:
  volumes:
    - name: data
      plan: vol-1
  postgres:
    - name: main
      plan: sp-1
  mysql: []
  redis: []
  apps:
    - name: web
      plan: sa-1-1
      public: true
      replicas: 1
      httpPort: 8080
      healthCheckPath: /healthz
      domains: []
      deploymentSource:
        type: docker
        docker:
          image: ghcr.io/me/app:latest
      envVars:
        - name: LOG_LEVEL
          value: info
      volumeMounts:
        - name: data
          mountPath: /var/lib/app

Git ベースのアプリでは、代わりに次のソースを使用します:

      deploymentSource:
        type: git
        git:
          url: https://github.com/me/app
          branch: main
          dockerfilepath: Dockerfile

hostim templates validate -f <file> を実行すると、リソースを作成する前に、名前、プラン、デプロイソースをオフラインで検証できます。

envVars 内のプレースホルダー

2 種類のプレースホルダーが自動的に解決されるため、テンプレートにホスト名や手書きのシークレットを含める必要はありません。

GENERATE_ME_<n> は、テンプレートの適用時に <n> 文字の新しいランダムなシークレットに置き換えられます。CLI によって展開されるため、API に届く値はすでに実際のシークレットになっています:

      envVars:
        - name: APP_SECRET
          value: GENERATE_ME_32

$(NAME) はコンテナ内に存在する別の変数を参照します。これらは CLI ではなくコンテナの起動時に展開されるため、hostim env get には引き続きリテラルの $(...) テキストが表示されます。これは想定どおりで、アプリには解決済みの値が渡されます:

  • $(BUILTIN_DOMAIN) — スキームを含まない、アプリの組み込みホスト名 (myapp-abc123.hostim.app)。
  • $(GIT_COMMIT) と $(GIT_COMMIT_SHORT) — 実行中のイメージのビルド元となったコミットの完全な SHA と 7 文字の SHA。Git アプリのみ対象です。hostim status には短い方が表示されます。
  • 同じプロジェクト内のマネージドデータベースは、データベース名を大文字にし、- を _ に置き換えたプレフィックスの接続変数を公開します。main という名前の Postgres では、$(MAIN_POSTGRES_HOST)、$(MAIN_POSTGRES_PORT)、$(MAIN_POSTGRES_DATABASE)、$(MAIN_POSTGRES_USER)、$(MAIN_POSTGRES_PASSWORD) が利用できます。MySQL では同じ 5 つのフィールドに _MYSQL_ を使用します。Redis では $(<NAME>_REDIS_HOST)、$(<NAME>_REDIS_PORT)、$(<NAME>_REDIS_DB)、$(<NAME>_REDIS_PASSWORD) が利用できます。
  postgres:
    - name: main
      plan: sp-1
  apps:
    - name: web
      envVars:
        - name: DATABASE_URL
          value: postgresql://$(MAIN_POSTGRES_USER):$(MAIN_POSTGRES_PASSWORD)@$(MAIN_POSTGRES_HOST):$(MAIN_POSTGRES_PORT)/$(MAIN_POSTGRES_DATABASE)
        - name: BASE_URL
          value: https://$(BUILTIN_DOMAIN)
        - name: SESSION_SECRET
          value: GENERATE_ME_32

CI からのデプロイ

GitHub Actions:

- name: Deploy
  env:
    HOSTIM_TOKEN: ${{ secrets.HOSTIM_TOKEN }}
    HOSTIM_PROJECT: my-project
  run: |
    curl -fsSL https://raw.githubusercontent.com/hostimdev/cli/main/install.sh | sh
    hostim deploy web \
      --docker-image ghcr.io/${{ github.repository }}:${{ github.sha }} \
      --plan sa-1-1 --port 8080 -o json

deploy は完了を待ち、失敗時にはゼロ以外の終了コードで終了するため、ビルドに失敗するとステップも失敗します。 すぐに使える GitHub Action もあります: https://github.com/hostimdev/action。

その他の CI でも手順は同じです:HOSTIM_TOKEN と HOSTIM_PROJECT をエクスポートし、バイナリをインストールして、-o json を指定して hostim deploy を実行します。

問題の報告

Hostim のツール、CLI コマンド、または API 呼び出しが、ユーザー自身の入力が原因ではない誤った結果や分かりにくい結果を返した場合は、ユーザーに伝え、報告を提案してください。 推奨:GitHub issue(https://github.com/hostimdev/cli/issues)。タイトルと本文の下書きを作成してユーザーに見せ、ユーザーが承諾してから gh issue create で issue を作成してください。それ以外の場合、ユーザーはコンソール(https://console.hostim.dev)のサポートチャットまたは [email protected] へのメールで問い合わせることができます。呼び出したツールまたはコマンド、返された内容、期待していた結果を含めてください。秘密情報や環境変数の値は含めないでください。

開発

API クライアント(api/client.gen.go)は、https://api.hostim.dev/openapi.public.json にあるライブの公開仕様から生成されます。仕様はリポジトリに含まれていません:

make generate    # curl live spec → oapi-codegen → api/client.gen.go
make build
make test
make lint

CI(.github/workflows/generate.yml)は、ライブ API に対して make generate を再実行し、api/client.gen.go に差分がある場合は失敗します。これにより、コミット済みのクライアントをデプロイ済みの API と同期した状態に保ちます。

この README は CLI ドキュメントの唯一の情報源です。バイナリに埋め込まれ、hostim agent によって出力されます。編集する場合はここだけを編集してください。

ライセンス

MIT。詳細は LICENSE をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。