InstaNode-dev について
InstaNode-devは、AIコーディングエージェント向けにデータベース、メッセージング、ストレージ、Webhook、コンテナを用意するMCPサーバーです。接続情報を返し、複数サービスのスタックにも対応します。匿名リソースは期限切れ前に請求できます。
主な機能
- 01Postgres、Redis、MongoDBの作成
- 02NATSキューとS3ストレージの作成
- 03受信Webhookの用意
- 04コンテナとサービススタックのデプロイ
- 05リソースの管理と請求
活用シーン
- 01プロトタイプ用データベースの作成
- 02リソースを結合したアプリのデプロイ
- 03受信Webhook処理のテスト
MCP 対応
リソース作成、デプロイ、スタック状態確認、アカウント管理のツールをMCPクライアントに公開します。匿名でリソースを作成でき、認証トークンにより追加の管理・デプロイ操作が利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @instanode/mcpINSTANODE_TOKENシークレットOptional bearer JWT for paid-tier callers. Mint at https://instanode.dev/dashboard → 'API token for CLI / agent'. Lifts the free-tier 5-per-subnet-per-day provisioning cap and auto-links new resources to your account. Leave unset to use the free tier anonymously.INSTANODE_API_BASEOverride the API base URL. Defaults to https://api.instanode.dev. Useful for self-hosted deployments.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
6掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | はい | このデータベースの人が読めるラベル(1~64 文字)。例:'prospector-agent' または 'test-pgpid-123'。 |
詳細
instanode-mcp
instanode.dev 向けの MCP サーバーです。AI コーディングエージェント (Claude Code、Cursor、Windsurf、Continue など)が、HTTPS 経由で一時的な開発者向けインフラ一式を プロビジョニングできます。Docker は不要で、無料の匿名利用枠ではサインアップも必要ありません。
リソースの種類ごとに 1 回のツール呼び出しで、すぐに使える接続文字列が返されます。
- Postgres(
create_postgres)→ pgvector がプリインストールされたpostgres://... - Redis(
create_cache)→ ACL でユーザーと名前空間が制限されたredis://... - MongoDB(
create_nosql)→ データベースにスコープを限定したロールを備えたmongodb://... - NATS JetStream(
create_queue)→ サブジェクト名前空間が制限されたnats://... - S3 互換ストレージ(
create_storage)→ エンドポイント + キー + プレフィックス (DigitalOcean Spaces が基盤です) - Webhook レシーバー(
create_webhook)→ 受信したすべてのリクエストを保存する公開 URL - コンテナデプロイ(
create_deploy)→ base64 gzip tarball(Dockerfile + ソース)をアップロードすると、 約 30 秒で公開 URL が返されます。resource_bindingsに上記リソースのトークンを渡すと、 それらのリソースをバインドできます。API がサーバー側でトークンを接続 URL に解決します。 - マルチサービススタック(
create_stack)→instant.yamlマニフェストで 1~N 個のサービスを宣言し、 1 回の MCP 呼び出しでバンドルとしてデプロイします。匿名ユーザーには、カード登録不要で、 ライブ URL(*.deployment.instanode.dev)が付いた TTL 6 時間のスタックが提供されます。 サービス間参照(service://<name>)はデプロイ時にクラスター内で解決されます。get_stackでステータスを確認できます。
匿名で作成したリソースはすべて 24 時間で自動的に期限切れになります。プロビジョニングの応答には
note フィールドと upgrade フィールドが含まれます。MCP サーバーは両方をそのまま返すため、
リソースを永続的に利用するために必要な正確な CTA とクレーム URL をエージェントがユーザーに提示できます。
返された upgrade_jwt に対して claim_resource を実行すると、ダッシュボードのクレーム URL を取得できます。
インストール
Claude Code
claude mcp add instanode -- npx -y instanode-mcp@latest
認証するには(有料プランの制限とアカウント管理ツールを利用可能にします):
claude mcp add instanode \
--env INSTANODE_TOKEN=<paste from https://instanode.dev/dashboard> \
-- npx -y instanode-mcp@latest
Cursor
.cursor/mcp.json(プロジェクト)または ~/.cursor/mcp.json(グローバル)に追加します:
{
"mcpServers": {
"instanode": {
"command": "npx",
"args": ["-y", "instanode-mcp@latest"],
"env": {
"INSTANODE_TOKEN": "<optional — paste from dashboard for paid tier>"
}
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json に追加します:
{
"mcpServers": {
"instanode": {
"command": "npx",
"args": ["-y", "instanode-mcp@latest"],
"env": {
"INSTANODE_TOKEN": "<optional>"
}
}
}
}
Continue.dev
~/.continue/config.yaml に追加します:
mcpServers:
- name: instanode
command: npx
args: ["-y", "instanode-mcp@latest"]
env:
INSTANODE_TOKEN: "<optional>"
この MCP をいつ使うべきかをエージェントに正確に伝える、すぐに使える CLAUDE.md / .cursorrules については、
https://instanode.dev/agent.html をご覧ください。
環境変数
| 変数 | 必須 | デフォルト | 用途 |
|---|---|---|---|
INSTANODE_TOKEN | いいえ | — | https://instanode.dev/dashboard で発行される Bearer JWT です。list_resources、claim_token、delete_resource、get_api_token、およびすべてのデプロイツール(create_deploy、list_deployments、get_deployment、redeploy、delete_deployment)に必要です。すべての create_* で有料プランの制限が解除されます。 |
INSTANODE_API_URL | いいえ | https://api.instanode.dev | API のベース URL を上書きします。k3s クラスターに対するローカル開発の場合にのみ設定してください。 |
INSTANODE_DASHBOARD_URL | いいえ | https://instanode.dev | claim_resource がクレーム URL の生成に使用するダッシュボードのホストを上書きします。ステージングの場合にのみ設定してください。 |
ツール
| ツール | 説明 |
|---|---|
create_postgres | POST /db/new — Postgres データベース(pgvector を含む)をプロビジョニングします。connection_url と note/upgrade の申請 URL を返します。name は必須です。 |
create_vector | POST /vector/new — pgvector 対応の Postgres データベース(埋め込みストア)をプロビジョニングします。connection_url と extension/dimensions、note/upgrade を返します。name は必須です。省略可能な dimensions はドキュメント用のヒントです。 |
create_cache | POST /cache/new — Redis キャッシュ(ACL でスコープ設定されたユーザーと名前空間)をプロビジョニングします。connection_url と note/upgrade を返します。name は必須です。 |
create_nosql | POST /nosql/new — MongoDB データベース(リソースごとのユーザーとデータベース単位のロール)をプロビジョニングします。connection_url と note/upgrade を返します。name は必須です。 |
create_queue | POST /queue/new — NATS JetStream キュー(スコープ設定されたサブジェクト名前空間)をプロビジョニングします。connection_url と note/upgrade を返します。name は必須です。 |
create_storage | POST /storage/new — S3 互換バケットのプレフィックス(DigitalOcean Spaces)をプロビジョニングします。エンドポイント、アクセスキー、プレフィックス、および note/upgrade を返します。name は必須です。 |
create_webhook | POST /webhook/new — インバウンド Webhook 受信 URL をプロビジョニングします。receive_url と note/upgrade を返します。name は必須です。 |
create_deploy | POST /deploy/new — base64 gzip tarball(Dockerfile を含む)をアップロードして、コンテナをデプロイします。deploy_id、status、url、build_logs_url を返します。name は必須です。redeploy: true(同じ name を指定)を渡すと、既存のデプロイをその場で更新します(同じ app_id と URL を維持します)。INSTANODE_TOKEN が必要です。 |
create_stack | POST /stacks/new — 複数サービスのバンドルです。instant.yaml マニフェストと、サービスごとに 1 つの base64 gzip tarball をアップロードします。stack_id、サービスごとの URL、および匿名ティアでの 6 時間 TTL の申請ブロックを返します。匿名利用に適しています(主な強みです)。name、manifest、service_tarballs は必須です。 |
get_stack | GET /stacks/{stack_id} — スタックのサービスごとのステータスと URL をポーリングします。匿名利用に適しています。stack_id は必須です。 |
list_deployments | GET /api/v1/deployments — 呼び出し元のチームにあるすべてのデプロイを一覧表示します。INSTANODE_TOKEN が必要です。 |
get_deployment | GET /api/v1/deployments/:id — 1 つのデプロイを取得します(status="running" になるまでポーリングします)。INSTANODE_TOKEN が必要です。 |
get_deployment_events | GET /api/v1/deployments/:id/events — デプロイの失敗タイムラインの分析結果(kind/reason/exit_code/event/last_lines/hint/created_at、新しい順)を読み取り、エージェントが壊れた Dockerfile を自力で修正できるようにします。limit は省略可能です。INSTANODE_TOKEN が必要です。 |
redeploy | POST /deploy/:id/redeploy — ID を指定して、既存のデプロイに更新済みコードをプッシュします。同じ URL を維持し、新しいビルドを行います。tarball_base64(create_deploy と同じ形式)が必要です。API は元の tarball を再利用しません。より一般的な「名前で更新」する方法として、create_deploy({ name, redeploy: true, tarball_base64 }) を推奨します。INSTANODE_TOKEN が必要です。 |
delete_deployment | DELETE /deploy/:id — 実行中のデプロイを削除します。元に戻せません。INSTANODE_TOKEN が必要です。 |
claim_resource | ヘルパー — 任意の create_* レスポンスに含まれる upgrade_jwt を、ユーザーがクリックするダッシュボード申請 URL に変換します。API 呼び出しはありません。認証は不要です。 |
claim_token | POST /claim — プログラムによる申請です。upgrade_jwt と email を使って、匿名リソースを認証済みアカウントに紐付けます。認証は不要です。 |
list_resources | GET /api/v1/resources — 呼び出し元のアカウントにあるリソースを一覧表示します。INSTANODE_TOKEN が必要です。 |
delete_resource | DELETE /api/v1/resources/{token} — 所有するリソースを完全に削除します。有料ティアのみ利用できます。INSTANODE_TOKEN が必要です。 |
get_api_token | POST /api/v1/auth/api-keys — 新しいベアラー Personal Access Token(PAT)を発行します。既存のユーザーセッション用 INSTANODE_TOKEN が必要です(PAT から別の PAT を発行することはできず、その場合 API は 403 を返します)。 |
get_capabilities | GET /api/v1/capabilities — ティアごとの最新の機能マトリックス(ストレージ/接続/リソース数/デプロイの上限、料金、バックアップ、および RPO/RTO の保証)をアップグレード順に読み取り、エージェントが呼び出し時に 402 が発生する前にプロビジョニングを計画できるようにします。認証は省略可能(公開された情報確認用エンドポイント)。 |
set_vault_key | PUT /api/v1/vault/{env}/{key} — チームの Vault にシークレットを書き込みます(常に新しいバージョンを作成します)。デプロイの env_vars で vault://{env}/{key} として参照すると、デプロイ時に API が復号します。Vault は有料です(Hobby+ は 20 件、Pro/Team は無制限。Hobby/Pro では環境は production に制限されます)。INSTANODE_TOKEN が必要です。 |
rotate_vault_key | POST /api/v1/vault/{env}/{key}/rotate — Vault シークレットの値をローテーションします(新しいバージョンを作成し、別の監査アクションとして記録されます)。適用するには、参照しているアプリを再デプロイしてください。INSTANODE_TOKEN が必要です。 |
update_deploy_env | PATCH /deploy/{id}/env — 既存のデプロイに環境変数をマージします(受信した値が優先されます。値には vault://env/KEY の参照を指定できます)。シークレットを伏せ字にしたマージ後のマップを返します。適用するには再デプロイしてください。INSTANODE_TOKEN が必要です。 |
update_stack_env | PATCH /stacks/{slug}/env — 既存のスタックに環境変数をマージします(行ロックされます。空文字列の値を指定するとキーが削除されます)。適用するにはスタックを再デプロイしてください。INSTANODE_TOKEN が必要です。 |
presign_storage | POST /storage/{token}/presign — ストレージプレフィックスにスコープ設定された、有効期間の短い(≤1h)事前署名付き S3 URL(GET/PUT/HEAD)を発行します。認証にはパス内のストレージトークンを使用するため、匿名ティアのストレージでも利用できます。DELETE は提供されません(URL が漏れてもプレフィックスを消去できないようにするためです)。 |
pause_resource | POST /api/v1/resources/{id}/pause — リソースを削除せずに一時停止します(ストレージと接続 URL は維持され、新しい接続は拒否されます)。Pro ティア以上が必要です。INSTANODE_TOKEN が必要です。 |
resume_resource | POST /api/v1/resources/{id}/resume — リソースの一時停止を解除します(同じ接続 URL が引き続き機能します)。Pro ティア以上が必要です。INSTANODE_TOKEN が必要です。 |
rotate_credentials | POST /api/v1/resources/{id}/rotate-credentials — リソースのパスワードをローテーションします。新しい connection_url をプレーンテキストで返します(ホストと DB は変更されません)。漏洩した古い URL を無効にします。INSTANODE_TOKEN が必要です。 |
wake_deployment | POST /deploy/{id}/wake — ゼロまでスケールダウンされたデプロイを明示的に起動します(レプリカ数を 1 にスケールし、サービス開始前にコールドスタートします)。プラットフォームのフラグで有効化されている必要があります。機能がオフの場合は 501 scale_to_zero_disabled を返します。INSTANODE_TOKEN が必要です。 |
コンテナのデプロイ(create_deploy)
デプロイは、プロジェクト(Dockerfile とソース)の base64 エンコードされた gzip 圧縮 tarball を含む、単一の multipart/form-data POST で行います。エンコードの処理は MCP ツールが担当するため、エージェントが行うのは tarball の作成だけです。
tarball の作成(任意の言語):
import base64, subprocess
tar = subprocess.check_output(["tar", "czf", "-", "-C", project_dir, "."])
tarball_base64 = base64.b64encode(tar).decode()
import { execFileSync } from "node:child_process";
const tar = execFileSync("tar", ["czf", "-", "-C", projectDir, "."]);
const tarball_base64 = tar.toString("base64");
上限は、デコード後で 50 MB です。.dockerignore を遵守し、docker build に必要なものだけを含めてください。name フィールドは必須です(1〜64 文字、英字/数字/スペース/ダッシュ)。これはダッシュボードに表示される、人が読めるラベルです。
プロビジョニング済みリソースのバインド:
まず create_postgres / create_cache などでリソースをプロビジョニングしてトークン(UUID)を取得し、そのトークンを resource_bindings として渡します。
{
"tarball_base64": "...",
"name": "my-app",
"port": 8080,
"resource_bindings": {
"DATABASE_URL": "<token from create_postgres>",
"REDIS_URL": "<token from create_cache>"
}
}
エージェントが渡すのはリソーストークンであり、接続 URL ではありません。API はデプロイ時にサーバー側で各トークンを接続 URL に解決します。MCP サーバーがトークンを事前に解決することはありません。事前に解決すると、すべてのバインドについて GET /credentials を経由してやり取りし、生のシークレットがツールのパラメーターに含まれることになり、エージェントホストによってログに記録される可能性があるためです。
ポーリング:
create_deploy はすぐに status="building" を返します。ステータスが "running" に変わるまで、数秒おきに get_deployment({ id: deploy_id }) をポーリングしてください(通常は約30秒)。その時点で、url フィールドに稼働中の URL が設定されます。
既存のデプロイを更新する(同じ URL で新しいビルド)
すでにデプロイしたアプリの v2 を、URL や app_id を変更せずに公開するには、同じ name と redeploy: true を指定して、もう一度 create_deploy を呼び出します。
{
"tarball_base64": "...",
"name": "my-app",
"redeploy": true
}
api は (team_id, name) を使って既存のデプロイを見つけ、その場で更新します。app_id と *.deployment.instanode.dev の URL はそのまま維持され、新しいイメージの展開中はステータスが再び building に変わります。
redeploy: true を指定せず、以前に使用した名前で create_deploy を呼び出すと、新しい app_id と新しい URL が発行されます(従来の動作)。これが、同じアプリに対してエージェントが稼働中のデプロイと URL を2つ持ってしまう AGENT-UX の問題の原因となった落とし穴です。
単独の redeploy ツール(name ではなく id を指定)も引き続き使用でき、tarball_base64 も必要です。api が元の tarball を再利用することはありません。名前がわかっている場合は create_deploy({ name, redeploy: true }) を優先してください。デプロイ ID しかわからない場合は redeploy({ id, tarball_base64 }) を使用してください。
プライベートデプロイ
private: true を設定し、allowed_ips を渡すと、Ingress で特定の IP アドレスまたは CIDR ブロックからのアクセスに制限できます。CRM、社内ダッシュボード、ステージングアプリなど、ユーザーだけがアクセスできるようにすべきアプリのデプロイをエージェントから依頼された場合に便利です。
Pro ティア以上が必要です。 Hobby プランの呼び出し元には agent_action フィールドを含む HTTP 402 が返されます。MCP サーバーはアップグレード URL を提示するため、エージェントからユーザーにアップグレードを促せます。
プロンプトの例(Claude Code に貼り付けます):
「CRM をプライベートアプリとしてデプロイし、1.2.3.4 とオフィスのサブネット 10.0.0.0/8 からのみアクセスできるようにしてください」
その後、エージェントは次のように呼び出します。
{
"tarball_base64": "...",
"name": "my-crm",
"private": true,
"allowed_ips": ["1.2.3.4", "10.0.0.0/8"]
}
get_deployment と list_deployments は private と allowed_ips をエージェントに返すため、エージェントはユーザーにポリシーを確認できます。プライベートデプロイをパブリックにするには、フラグを付けずに再デプロイしてください。
匿名からアカウントへの紐付けの仕組み
すべての create_* ツールは3つのフィールドを返します。エージェントはこれらを重要な情報として扱ってください。
token— リソースの UUID(claim_tokenとdelete_resourceで使用します)。note— アップグレード URL にも触れた、人が読める1文の CTA です。upgrade— 完全な紐付け URL(https://instanode.dev/start?t=<jwt>)です。ユーザーがこの URL をクリックし、GitHub/Google またはマジックリンクでサインインすると、リソースがアカウントに紐付けられます。
独自の UI を作成して紐付けフローを提供したい呼び出し元には、upgrade_jwt も返されます。claim_resource ツールはこの JWT を受け付け、同じダッシュボード URL を返します。元の応答が会話のコンテキストから外れた後に、エージェントが紐付け URL を再提示したい場合に便利です。
エージェントとのやり取りの例
1. 「このプロジェクト用の Postgres が必要です」
あなた: Claude、このプロジェクト用の Postgres データベースが必要です。
Claude: 呼び出し
create_postgres({ name: "my-side-project" })
postgres://usr_a1b2:[email protected]:5432/db_a1b2?sslmode=requireのようなconnection_urlと、note: "Works for 24h free. Claim to keep — from $9/mo: https://instanode.dev/start?t=..."を返します。続いて Claude:
.envにDATABASE_URL=...を書き込み、.envを.gitignoreに追加して、マイグレーションを実行します。さらに、24 時間を過ぎてもデータベースを保持する方法がわかるように、 ユーザーに請求 URL をそのまま表示します。
2. 「レート制限用の Redis キャッシュを起動してください」
あなた: API にレート制限をかけられるよう、Redis キャッシュを追加してください。
Claude: 呼び出し
create_cache({ name: "api-ratelimit" })
redis://usr_b2c3:[email protected]:6379/0のようなconnection_urlを返します。
3. 「Stripe イベントを受け取る Webhook を設定してください」
あなた: Stripe の送信先に指定できる Webhook URL をください。
Claude: 呼び出し
create_webhook({ name: "stripe-sandbox" })すべてのリクエストを記録する
receive_urlを返します。curl $receive_urlを実行すると、保存されたログを取得できます。
4. 「ユーザーのアップロード用のオブジェクトストレージ」
あなた: アップロードされたアバター用に S3 互換ストレージが必要です。
Claude: 呼び出し
create_storage({ name: "user-avatars" })エンドポイント、アクセスキー、シークレットキー、プレフィックスを返します。Claude は返された認証情報を使って AWS SDK を設定します。
5. 「昨夜作成したデータベースを永続化してください」
あなた: 昨日作成してもらったデータベースを、24 時間を過ぎても保持したいです。
Claude(INSTANODE_TOKEN なし): 呼び出し
claim_resource({ upgrade_jwt: "<the upgrade_jwt from yesterday's response>" })→ ダッシュボードの請求 URL を表示します。クリックしてサインインすると、リソースがアカウントに紐付けられます。Claude(INSTANODE_TOKEN あり): 呼び出し
claim_token({ token: "a1b2c3d4-..." })→ リソースが認証済みアカウントに紐付けられます。 ブラウザーを介したやり取りは不要です。
認証
匿名利用枠は、設定なしで利用できます。有料枠、永続リソース、アカウント管理ツール(list_resources、
delete_resource、claim_token、get_api_token)を利用するには、次の手順に従ってください。
- GitHub で https://instanode.dev にサインアップします。
- ダッシュボードにアクセスし、ベアラートークンをコピーします。
- MCP サーバーの
envブロックでINSTANODE_TOKENとして設定します(上記の例を参照)。
get_api_token を呼び出すと、POST /api/v1/auth/api-keys を通じて新しい Personal Access Token が発行され、いつでもローテーションできます。PAT は有効期限ではなく、失効によって管理されます。注:PAT から別の PAT を発行することはできません。get_api_token には、ユーザーセッショントークン(ダッシュボードからサインインして取得)が必要です。既存の PAT を使用すると、API は 403 を返します。
開発
npm install
npm run build
# Integration test (optional — requires a running instanode.dev server.
# For local k8s, port-forward first: kubectl port-forward -n instant svc/instant-api 8080:8080):
INSTANODE_API_URL=http://localhost:8080 npm test
ライセンス
MIT — (c) instanode.dev
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。