デフォルトでは、Managed AgentsはツールとコードをAnthropicが管理するクラウドサンドボックス内で実行します。セルフホスト型サンドボックスでは、オーケストレーションはAnthropic側に残したまま、ツール実行をお客様が管理するインフラストラクチャに移すため、エージェントのコード、ファイルシステム、ネットワークの外向き通信がお客様の環境から外に出ることはありません。
ツール実行はお客様のホスト上にとどまります。エージェントが読み書きするファイルシステム、生成するプロセス、到達可能なネットワークはすべてお客様の管理下にあります。ツールの入力と出力は、モデルが結果を確認して次に何をすべきかを判断できるように、引き続きAnthropicのコントロールプレーン(Claudeが実行される場所)に流れます。完全なデータフローの境界については、セキュリティモデルを参照してください。
セルフホスト型サンドボックスは、Claude Opus 4.8やClaude Opus 5を含む、Managed Agentsで利用可能なすべてのClaudeモデルをサポートしています。モデルは環境ではなくエージェントで設定します。
| クラウド環境 | セルフホスト型サンドボックス | |
|---|---|---|
| ツールの実行場所 | Anthropicが管理するサンドボックス | お客様のインフラストラクチャ |
| ネットワークの到達範囲 | Anthropicの外向き通信制御 | お客様のネットワークポリシー |
| ファイルとGitHubリポジトリのマウント | Anthropicが管理 | お客様が管理 |
| ライフサイクル | Anthropicが管理 | お客様が管理 |
セルフホスティングは、エージェントがネットワーク境界の外に出せないデータを操作する必要がある場合、パブリックにルーティングできない内部サービスに到達する必要がある場合、または組織独自のコンプライアンスおよび監査管理の下で実行する必要がある場合に適しています。
Zero Data RetentionおよびHIPAA BAAの適格性については、APIとデータ保持を参照してください。
セルフホスティングはエージェントのコードがどこで実行されるかを制御します。MCPトンネルはAnthropicがお客様のネットワーク内のMCPサーバーにどのように到達するかを制御します。これらは独立しています。Anthropicのクラウドサンドボックスで実行されるセッションでもトンネル経由でプライベートMCPサーバーに到達でき、セルフホスト型セッションでもトンネル経由または公開MCPサーバーのいずれも使用できます。実行とツールアクセスの両方を境界内に保ちたい場合は、両方を使用してください。トンネルを実行せずにネットワーク内のMCPサーバーのツールをエージェントに提供するには、ワーカーが提供するカスタムツールとしてサーバーをラップすることもできます。
このガイドでは、任意の汎用サンドボックスプラットフォームでワーカーを構築する方法を説明します。プラットフォーム固有の追加ガイドは、AWS Lambda MicroVMs、Blaxel、Cloudflare、Daytona、E2B、GKE Agent Sandbox、Modal、Namespace、Superserve、Vercelで利用できます。
環境ワーカーは、お客様自身のインフラストラクチャ上で実行するプロセスです。Anthropicからツール実行リクエストを受け取り、ローカルで実行します。self_hosted環境はワークキューとして機能します。セッションが環境に割り当てられると、Anthropicはそのセッションをワークアイテムとしてキューに入れます。ワーカーはそのキューからワークアイテムを取得(クレーム)し、それぞれに対して実行コンテキストを生成し、エージェントのスキル(エージェントにドメイン固有の専門知識を与える、再利用可能なファイルシステムベースのリソース)をダウンロードし、ツール呼び出しを実行して、結果を返送します。
ワークアイテムは環境のキューをポーリングすることでクレームされます。継続的にポーリングする常時稼働ワーカー、またはsession.status_run_startedで起動してポーリングを開始するWebhookトリガー型ハンドラーのいずれかです。
CLIとSDKの両方に、事前構築されたワーカーが付属しています。ant CLIは常時稼働パターンのみをサポートし、SDKは常時稼働とWebhookトリガー型の両方をサポートします。どちらも設定可能です。CLIフラグについてはリファレンスのセルフホスト型ワーカーを、SDKオプションについてはこのページのSDKヘルパーを参照してください。より細かく制御したい場合は、Environments Workエンドポイントを直接呼び出して独自のワーカーを実装してください。
/workspace: ツール実行とスキルダウンロードのためのシステムデフォルトの作業ディレクトリです。CLIの--workdirフラグはデフォルトで現在のディレクトリになります。システムデフォルトに合わせるには--workdir /workspaceを渡してください。スキルは<workdir>/skills/<name>/にダウンロードされます。別の作業ディレクトリを使用する場合は、Claudeがスキルファイルを見つけられるようにエージェントのシステムプロンプトを更新してください。/mnt/session/outputsの指示が省略されるため、最終的な成果物はエージェントがサンドボックスのファイルシステム内に書き込んだ場所(通常は作業ディレクトリ配下)に配置されます。以下が必要です。
/bin/bashがその正確なパスに存在するLinuxホスト。 ワーカーのbashツールはPATHを参照せずに直接これを呼び出します。TypeScript SDKはさらにPATH上のunzipとtar、およびNode.js 22以降を必要とします。PythonとGoのSDKはアーカイブ展開に標準ライブラリを使用するため、追加のバイナリ要件はありません。ant CLIまたはAnthropic SDK(Python、TypeScript、またはGo)。Claude Platform on AWSでは、ワーカーは環境キーではなく、AWS IAM(SigV4)またはAWS Consoleで生成されたAPIキーで認証します。ワーカーが実行されるIAMプリンシパルにAnthropicSelfHostedEnvironmentAccessマネージドポリシーをアタッチしてください。Claude Consoleで生成された環境キーは、Claude Platform on AWSのエンドポイントでは機能しません。
セルフホスト型環境を作成する
Consoleで: Workspace > Environments > New > Self-hosted
またはAPI経由で:
client = anthropic.Anthropic()
environment = client.beta.environments.create(
name="self-hosted", config={"type": "self_hosted"}
)
print(environment.id)環境キーを生成する
Consoleで環境を開き、Generate environment keyをクリックします。環境をConsoleとAPIのどちらで作成したかにかかわらず、キーの生成はConsoleでのみ可能です。次に、ワーカーホスト上で環境IDとキーをエクスポートします。
export ANTHROPIC_ENVIRONMENT_KEY="sk-ant-oat01-..."
export ANTHROPIC_ENVIRONMENT_ID="env_..."スキルには、エージェントが直接実行できる実行可能ファイルを含めることができます。CLIとSDKのワーカーは、スキルバンドルを展開する際に、バンドルに記録された実行権限を保持します。スキルのダウンロードを手動で実装する場合は、実行権限の設定はお客様の責任となります。
最もシンプルなセットアップには常時稼働を選択してください。長時間実行されるプロセスがキューを継続的にポーリングし、必要なのは外向きのHTTPSのみです。アイドル状態のポーラーを実行したくない場合はWebhookトリガー型を選択してください。これにはAnthropicが到達できるWebhookエンドポイントが必要です(エンドポイントのセットアップと署名検証についてはWebhookを参照してください)。
ant CLIをインストールする
ワーカーホスト上でこれを実行します。
Linux環境では、リリースバイナリを直接ダウンロードします。
VERSION=1.21.0
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
case $(uname -m) in
x86_64) ARCH=amd64 ;;
aarch64) ARCH=arm64 ;;
esac
curl -fsSL "https://github.com/anthropics/anthropic-cli/releases/download/v${VERSION}/ant_${VERSION}_${OS}_${ARCH}.tar.gz" \
| sudo tar -xz -C /usr/local/bin antすべてのリリースはGitHubリリースページで確認できます。
ワーカーを実行する
インプロセス
ant beta:worker pollは、環境に割り当てられたワークアイテムをクレームし、スキルをダウンロードし、作業ディレクトリでツール呼び出しを実行して、結果を返送します。環境変数からANTHROPIC_ENVIRONMENT_KEYとANTHROPIC_ENVIRONMENT_IDを読み取ります。
ant beta:worker poll \
--workdir "/workspace"ワーカーはSIGTERMまたはSIGINTでクリーンに終了します。実行中のツール呼び出しをキャンセルし、そのエラー結果を送信し、停止する前にワークアイテムを解放します。
セッションごとのサンドボックス
より強力な分離(新しいファイルシステム、リソース制限、セッションごとのネットワーク制御)が必要な場合は、各セッションを独自のサンドボックスで実行してください。antをインストールし、ant beta:worker runをエントリポイントとするイメージをビルドします。ベースイメージは/bin/bashを提供する必要があります。curlはビルド時にのみ使用されます。サンドボックスが起動すると、環境変数からセッションの詳細を読み取り、そのセッションを処理して終了します。
FROM your-base-image
ARG ANT_VERSION=1.21.0
ARG TARGETARCH
RUN ARCH=$([ "$TARGETARCH" = "arm64" ] && echo arm64 || echo amd64) && \
curl -fsSL "https://github.com/anthropics/anthropic-cli/releases/download/v${ANT_VERSION}/ant_${ANT_VERSION}_linux_${ARCH}.tar.gz" \
| tar -xz -C /usr/local/bin ant
WORKDIR /workspace
VOLUME /workspace
ENTRYPOINT ["ant", "beta:worker", "run"]次に、セッションの詳細を新しいサンドボックスに転送するスポーンスクリプトを作成します。ポーラーはANTHROPIC_SESSION_ID、ANTHROPIC_WORK_ID、ANTHROPIC_ENVIRONMENT_ID、ANTHROPIC_ENVIRONMENT_KEYをスクリプトの環境に注入します。ANTHROPIC_BASE_URLはオプションで、ポーラーホストで設定されていた場合にのみ渡されます。これはデフォルトのAPIエンドポイントを上書きします。この例では、/host/outputsはお客様が選択するホストディレクトリで、サンドボックスの作業ディレクトリ(/workspace)にバインドマウントされるため、サンドボックスの終了後にセッションの成果物を取得できます。セルフホスト型環境では、エージェントは成果物を/mnt/session/outputsではなく作業ディレクトリ配下に書き込むため(サンドボックスのファイルシステムを参照)、作業ディレクトリをマウントすることで成果物を取得できます。このマウントには、ダウンロードされたskills/ツリーやエージェントが作成した中間ファイルも含まれます。
#!/bin/bash
# spawn.sh: クレームされた作業項目ごとに1回呼び出されます
mkdir -p "/host/outputs/$ANTHROPIC_SESSION_ID"
exec docker run --rm \
-e ANTHROPIC_SESSION_ID -e ANTHROPIC_ENVIRONMENT_KEY \
-e ANTHROPIC_WORK_ID -e ANTHROPIC_ENVIRONMENT_ID -e ANTHROPIC_BASE_URL \
-v "/host/outputs/$ANTHROPIC_SESSION_ID":/workspace \
your-imageスクリプトを指定してポーラーを起動します。
ant beta:worker poll \
--on-work ./spawn.shSDKは、異なる制御レベルの3つのヘルパーを提供します。EnvironmentWorkerはほとんどのユースケースをカバーします。セッションごとに独自のプロセスを起動する必要がある場合や、すでにクレーム済みのセッションに対してツールを実行する必要がある場合は、より低レベルのヘルパーを使用してください。
EnvironmentWorker: すぐに使えるワーカーです。ポーリング、セットアップ、実行をエンドツーエンドで処理します。
.run(): 無期限に実行され、セッションが到着するたびに取得します。.handle_item(): クレーム済みの単一のワークアイテムを処理して終了します。ワーク、セッション、環境の識別子を明示的に渡すか、ant beta:worker poll --on-workが生成するプロセスに設定するANTHROPIC_*変数を読み取らせます。work.poller(): ワークキューをポーリングし、クレームした各セッションを渡します。各セッションに対して何を行うかを自分で決めたい場合(たとえば、インプロセスでツールを実行するのではなくサンドボックスを起動する場合)に使用します。
drain: 新しいワークを待つのではなく、キューが空になったらポーリングを停止するかどうか。block_ms: ワークが到着するまで待機する時間(ミリ秒)。1から999の間である必要があります(ポーリングごとの待機時間。ヘルパーは自動的に再ポーリングします)。ノンブロッキングチェックにはnull(PythonではNone、Goではparam.Null[int64]())を渡します。パラメータを省略するとデフォルトの999ミリ秒のロングポーリングが使用されます。reclaim_older_than_ms: クレームされたものの、この時間(ミリ秒)内に確認応答されなかったワークアイテムを再クレームします。auto_stop: ループ本体がワークアイテムの処理を終えたときに、各ワークアイテムに対して停止シグナルを送信するかどうか。Goのポーラーにはオプトアウトがなく、常に停止シグナルを送信するため、デタッチするのではなく、セッションが完了するまでループ本体内でブロックしてください。client.beta.sessions.events.tool_runner(): セッションIDとツールリストを指定して、単一のセッションのツール呼び出しを実行します。すでにワークをクレーム済みで、実行レイヤーのみが必要な場合に使用します。セッションごとに独自のプロセスを起動したい場合(たとえば、クレームした各セッションに対してサンドボックスを起動する場合)は、ワークポーラーを直接使用してください。
import asyncio
import os
from anthropic import AsyncAnthropic
from anthropic.types.beta.environments import BetaSelfHostedWork
async def launch_container(work: BetaSelfHostedWork) -> None:
# 独自のセッション単位のサンドボックスランチャーに置き換えてください。
# 起動したサンドボックスにはANTHROPIC_ENVIRONMENT_KEYを渡し、
# APIキーは決して渡さないでください。
print(f"claimed session {work.data.id}")
async def main() -> None:
environment_key = os.environ["ANTHROPIC_ENVIRONMENT_KEY"]
environment_id = os.environ["ANTHROPIC_ENVIRONMENT_ID"]
async with AsyncAnthropic(auth_token=environment_key) as client:
async for work in client.beta.environments.work.poller(
environment_id=environment_id,
environment_key=environment_key,
auto_stop=False, # the launched sandbox owns the stop call
):
await launch_container(work)
asyncio.run(main())**AgentToolContextはツール呼び出しの実行コンテキストです。作業ディレクトリとパスポリシーを定義し、セッションのスキルをダウンロードできます。beta_agent_toolset_20260401(env)**はAgentToolContextを受け取り、標準のツール実装(bash、read、write、edit、glob、grep)を返します。
EnvironmentWorkerを使用する場合: どちらも自動的に管理されます。ツールリストをカスタマイズするにはtoolsファクトリを渡します。
EnvironmentWorker(client, ..., tools=lambda env: [beta_bash_tool(env), my_custom_tool])work.poller()とtool_runner()を使用する場合: client.beta.sessions.events.tool_runner()にtoolsとしてツールリストを渡します。そのリストを構築するには、AgentToolContextを自分でセットアップし、beta_agent_toolset_20260401(env)を呼び出します。
from anthropic.lib.tools.agent_toolset import (
AgentToolContext,
beta_agent_toolset_20260401,
)
async with AgentToolContext(
workdir="/workspace", client=client, session_id=work.data.id
) as env:
# スキルは /workspace/skills/<name>/ にダウンロードされます
tools = beta_agent_toolset_20260401(env)別のシェルから、ANTHROPIC_API_KEYにClaude APIキー(環境キーではありません)を設定した状態で、workers_pollingが1以上であることを確認します。
ant beta:environments:work stats --environment-id "$ANTHROPIC_ENVIRONMENT_ID"workers_pollingが0のままの場合、ワーカーはキューに到達していません。ワーカーホスト上でANTHROPIC_ENVIRONMENT_KEYとANTHROPIC_ENVIRONMENT_IDが設定されていることを確認してください。完全な統計レスポンスと他の言語の例については、キューの深さを読み取るを参照してください。
ワーカーが実行されたら、その環境を対象とするセッションを作成します。AGENT_IDには始める前にで控えたエージェントIDを設定します。セッションは環境のワークキューに入り、ワーカーがクレームするまでそこで待機します。ワーカーが接続されていない場合、セッションは失敗せずにキューに残ります。
Anthropicはセルフホスト型サンドボックスにファイルやGitHubリポジトリをマウントしません。セッション固有のファイルを利用可能にするには、セッションのmetadataフィールドにファイル参照(S3パスやコミットSHAなど)を渡します。クレームされたワークアイテムにはセッションのメタデータは含まれませんが、セッションIDは含まれます。スポーンスクリプトまたは--on-workハンドラーがセッションを取得(GET /v1/sessions/{session_id})してmetadataフィールドを読み取り、ツール実行が始まる前にファイルを作業ディレクトリにステージングします。
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
metadata={"input_file": "s3://my-bucket/data.csv"},
)セルフホスト型サンドボックスはresourcesエントリをサポートしていません。セルフホスト型環境でリソースを含むセッションは拒否されます。
CLIフラグの完全なリストについてはリファレンスのセルフホスト型ワーカーを、SDKヘルパーのオプションについてはSDKヘルパーを参照してください。
カスタムツールは、お客様自身のコードが実行するツールです。エージェントはagent.custom_tool_useイベントを発行し、対応するuser.custom_tool_resultを待ちます。ワーカーがそのコードになることができ、サンドボックス内で実行されるため、ツールはサンドボックスに設定した内部サービス、認証情報、ネットワークの外向き通信にのみ到達できます。環境キーがカスタムツール結果の送信を認可するため、Claude APIキーをワーカーホストに置く必要はありません。
カスタムツールの提供にはSDKワーカーが必要です。ant CLIワーカーにはカスタムツールの実装を登録する方法がありません。セッションごとのサンドボックスパターンでは、ant beta:worker runの代わりに、サンドボックス内でhandle_item()(TypeScriptではhandleItem、GoではHandleItem)を使用してEnvironmentWorkerを実行してください。
エージェントにツールを宣言する
ワーカーが登録するツールとnameが一致するcustomエントリをエージェントのtoolsに追加します。完全な宣言の形式についてはカスタムツールを参照してください。
{
"type": "custom",
"name": "get_order_status",
"description": "Look up an order in the internal fulfillment system by order ID.",
"input_schema": {
"type": "object",
"properties": {
"order_id": { "type": "string", "description": "The order ID" }
},
"required": ["order_id"]
}
}ワーカーに実装を登録する
組み込みのツールセットと一緒に、ワーカーのtoolsファクトリ(SDKヘルパーを参照)を通じてツールを渡します。
import asyncio
import os
from anthropic import AsyncAnthropic, beta_async_tool
from anthropic.lib.environments import EnvironmentWorker
from anthropic.lib.tools.agent_toolset import beta_agent_toolset_20260401
@beta_async_tool
async def get_order_status(order_id: str) -> str:
"""Look up an order in the internal fulfillment system by order ID."""
# ワーカーホスト上で実行されます:サンドボックスから到達できるものは何でも呼び出せます。
return f"Order {order_id}: shipped"
async def main() -> None:
environment_key = os.environ["ANTHROPIC_ENVIRONMENT_KEY"]
environment_id = os.environ["ANTHROPIC_ENVIRONMENT_ID"]
async with AsyncAnthropic(auth_token=environment_key) as client:
await EnvironmentWorker(
client,
environment_id=environment_id,
environment_key=environment_key,
workdir="/workspace",
tools=lambda env: [*beta_agent_toolset_20260401(env), get_order_status],
).run()
asyncio.run(main())ワーカーは、登録されたツールにのみ応答します。エージェントに宣言されているがワーカーにもクライアントにも登録されていないカスタムツールは、何かがその結果を送信するまで、セッションをrequires_action停止理由で一時停止状態のままにします。イベントフローについてはカスタムツール呼び出しの処理を参照してください。
MCPコネクタはAnthropic側からMCPサーバーに接続するため、サーバーは直接またはMCPトンネル経由でAnthropicが到達できるHTTPエンドポイントを公開する必要があります。お客様のネットワークからのみ到達可能なサーバーを使用するには、代わりにワーカーをMCPクライアントにし、サーバーのツールをカスタムツールとして宣言します。MCPサーバーはネットワーク外部からの受信接続を必要としません。Anthropicが受け取るのは、エージェントに宣言したツール定義、各呼び出しの入力、ワーカーが返送する結果のみです。実行時には、モデルはラップされたツールを他のカスタムツールと同様に呼び出します。
agent.custom_tool_useイベントを発行します。user.custom_tool_resultとして送信します。SDKのクライアントサイドMCPヘルパーは、サーバーのツールをワーカーが受け入れる実行可能なツールに変換します。Anthropic SDKと一緒にMCP SDKをインストールしてください(pip install "anthropic[mcp]" "mcp>=1.24"、npm install @modelcontextprotocol/sdk、go get github.com/modelcontextprotocol/go-sdk)。例では認証なしで接続しています。認証情報を送信するには、MCPトランスポートに渡すHTTPクライアントまたはリクエストオプション(Pythonではhttp_client、TypeScriptではrequestInit、GoではHTTPClient)を設定してください。
エージェントにサーバーのツールを宣言する
MCPサーバーのツールを一覧表示し、それぞれをcustomツールとして宣言します。MCPのname、description、inputSchemaはカスタムツールのフィールドに1対1で対応します。サーバーがツールリストをページネーションする場合は、すべてのページを宣言してください。ワーカーも同じページを一覧表示する必要があります。
import asyncio
from typing import Any, cast
from anthropic import AsyncAnthropic
from anthropic.types.beta import BetaManagedAgentsCustomToolParams
from mcp import ClientSession, types
# mcp >= 1.24 が必要です(streamablehttp_client が streamable_http_client に改名されました)。
from mcp.client.streamable_http import streamable_http_client
MCP_SERVER_URL = "http://mcp.internal.example.com:8000/mcp"
def to_custom_tool(tool: types.Tool) -> BetaManagedAgentsCustomToolParams:
# MCPのフィールドはカスタムツール宣言に1対1で対応します。cast は
# スキーマ辞書をそのままSDKの型付きパラメータに渡します。
return {
"type": "custom",
"name": tool.name,
"description": tool.description or tool.name,
"input_schema": cast(Any, tool.inputSchema),
}
async def main() -> None:
# これはワーカーホストではなく、エージェントを作成する場所で実行してください。
# Claude APIキー(ANTHROPIC_API_KEY)で認証します。
async with (
streamable_http_client(MCP_SERVER_URL) as (read, write, _),
ClientSession(read, write) as mcp_session,
AsyncAnthropic() as client,
):
await mcp_session.initialize()
listed = await mcp_session.list_tools()
agent = await client.beta.agents.create(
name="Internal tools agent",
model="claude-opus-5",
tools=[
{"type": "agent_toolset_20260401"},
*[to_custom_tool(tool) for tool in listed.tools],
],
)
print(agent.id)
asyncio.run(main())ワーカーからツールを提供する
起動時に同じMCPサーバーに接続し、MCPヘルパーでそのツールを変換し、組み込みのツールセットと一緒に登録します。ワーカーの存続期間中、1つのMCPセッションを開いたままにしてください。
import asyncio
import os
from datetime import timedelta
from anthropic import AsyncAnthropic
from anthropic.lib.environments import EnvironmentWorker
from anthropic.lib.tools.agent_toolset import beta_agent_toolset_20260401
from anthropic.lib.tools.mcp import async_mcp_tool
from mcp import ClientSession
# mcp >= 1.24 が必要です(streamablehttp_client が streamable_http_client に改名されました)。
from mcp.client.streamable_http import streamable_http_client
MCP_SERVER_URL = "http://mcp.internal.example.com:8000/mcp"
async def main() -> None:
environment_key = os.environ["ANTHROPIC_ENVIRONMENT_KEY"]
environment_id = os.environ["ANTHROPIC_ENVIRONMENT_ID"]
# 起動時に一度だけ MCP サーバーに接続し、ワーカーの存続期間中は
# セッションを開いたままにします。タイムアウトにより、ハングしたツール呼び出しは
# 停止したままになるのではなくエラー結果として返されます。
async with (
streamable_http_client(MCP_SERVER_URL) as (read, write, _),
ClientSession(read, write, read_timeout_seconds=timedelta(seconds=60)) as mcp_session,
AsyncAnthropic(auth_token=environment_key) as client,
):
await mcp_session.initialize()
listed = await mcp_session.list_tools()
mcp_tools = [async_mcp_tool(tool, mcp_session) for tool in listed.tools]
await EnvironmentWorker(
client,
environment_id=environment_id,
environment_key=environment_key,
workdir="/workspace",
tools=lambda env: [*beta_agent_toolset_20260401(env), *mcp_tools],
).run()
asyncio.run(main())MCPサーバーをラップする際は、以下の点に注意してください。
tools配列は最大128エントリです(ラップされた各ツールが1エントリ、組み込みツールセットがさらに1エントリ)。APIは、ツール名を再利用する宣言、bashやreadなどの組み込みエージェントツールと同じ名前のカスタムツール、予約済みのmcp__プレフィックスを使用する宣言を拒否します。MCPヘルパーはサーバーの名前と説明をそのまま保持するため、必要に応じて名前を変更したり短縮したりしてください。2つのサーバーが同じツール名を公開している場合は、プレフィックス付きの名前でラッパーを自分で定義し、サーバーの元のツール名を呼び出すようにしてください。additionalPropertiesやtitleなど、MCPサーバーが一般的に出力するJSON Schemaキーワードを受け入れます。カスタムツールのinput_schema内のどこにあっても$refなどの参照キーワードは拒否されるため、pydanticなどのジェネレータが$defsに分離するスキーマはインライン化してください。また、トップレベルのoneOf、anyOf、allOf、および英字、数字、アンダースコア、ドット、ハイフン以外のプロパティ名(1〜64文字)も拒否されます。read_timeout_secondsで行っているように、MCPクライアントにタイムアウトを設定すると、より速く明確に失敗します。タイムアウトがない場合、ハングした呼び出しは、TypeScript MCP SDKのデフォルトのリクエストタイムアウト(約1分)が発火するか、ワーカー自身のバックストップ(Pythonでは約2分半、Goでは2分。Goではワーカーが120秒のデフォルトを超えたツール呼び出しをキャンセルしてエラー結果を送信します)が発火したときにのみエラー結果になります。bashを含む他のツールでエージェントが何をするかに影響を与える可能性のある、信頼できない入力です。エージェントに使用させる意図のあるツールのみを宣言してください。これらの呼び出しは、ワーカーフリートを観察および管理するために、Claude APIキーで認証されたモニタリングまたは運用ツールから実行します。クレームとキープアライブのループはワーカーヘルパー内で処理されるため、これらのエンドポイントを直接呼び出す必要はありません。
これらのエンドポイントは、組織のAPIキーまたは環境キーのいずれかを受け入れます。ワーカーホストの外部から組織のAPIキーで呼び出してください。ワーカーホストにANTHROPIC_API_KEYを設定すると、組織スコープの認証情報がエージェントのツール呼び出しに公開されます。
work.statsは環境のキュー状態を返します。
depthはクレーム待ちのアイテム数です。この値に基づいてワーカーフリートをスケールしたり、バックログのアラートを設定したりしてください。pendingはワーカーによってクレームされたがまだ確認応答されていないアイテム数です。ワーカーヘルパーは各アイテムを処理する前に確認応答するため、通常の運用ではこの値はゼロに近い状態を保ちます。ゼロ以外の値が持続する場合は、ワーカーがクレームと確認応答の間で停止していることを意味します。oldest_queued_atは、まだキューにある最も古いアイテム(クレーム待ち、またはクレーム済みだが未確認応答)のタイムスタンプです。存在しない場合はnullです。workers_pollingは、過去30秒間にポーリングしたワーカーの数です。死活監視のアラートに使用してください。import os
import anthropic
client = anthropic.Anthropic()
stats = client.beta.environments.work.stats(os.environ["ANTHROPIC_ENVIRONMENT_ID"])
print(f"depth={stats.depth} pending={stats.pending}"){
"type": "work_queue_stats",
"depth": 0,
"pending": 0,
"oldest_queued_at": null,
"workers_polling": 0
}work.stop を使用して、特定のセッションを処理しているワーカーにシャットダウンを要求します。デフォルトでは、ワークアイテムは stopping に移行します。ワーカーは次のリースハートビートでこれに気づき、セッションの実行中のツール呼び出しをキャンセルし、シャットダウンを確認します。その時点でワークアイテムは stopped になります。リクエストボディで force: true を渡す(CLIの場合は --force を渡す)と、ワーカーの確認を待たずにワークアイテムを即座に stopped としてマークします。
これらの呼び出しはワーカーホストではなく運用ツールから実行されるため、ANTHROPIC_WORK_ID は自動的に設定されません。以下の例を実行する前に、対象のワークアイテムのIDを設定してください。ワークアイテムのIDを見つけるには、Environments Workエンドポイントを通じて環境のワークアイテムを一覧表示します。
import os
import anthropic
client = anthropic.Anthropic()
work = client.beta.environments.work.stop(
os.environ["ANTHROPIC_WORK_ID"],
environment_id=os.environ["ANTHROPIC_ENVIRONMENT_ID"],
)
print(work.state)セルフホスト型サンドボックス環境の責任共有モデル。
エージェントを実行してタスクの実行を開始するためのセッションを作成します。
インバウンドポートを開放したりサービスをパブリックインターネットに公開したりすることなく、プライベートネットワーク内で実行されているMCPサーバーにClaudeを安全に接続します。
Was this page helpful?