默认情况下,Managed Agents 在 Anthropic 托管的云沙箱内执行工具和代码。自托管沙箱将编排保留在 Anthropic 一侧,但将工具执行移至您控制的基础设施中,因此代理的代码、文件系统和网络出口永远不会离开您的环境。
工具执行保留在您的主机上:代理读写的文件系统、它生成的进程以及它可以访问的网络都在您的控制之下。工具输入和输出仍会流向 Anthropic 的控制平面(Claude 运行的地方),以便模型可以看到结果并确定下一步要做什么。请参阅安全模型了解完整的数据流边界。
自托管沙箱支持 Managed Agents 中可用的所有 Claude 模型,包括 Claude Opus 4.8 和 Claude Opus 5。模型是在代理上配置的,而不是在环境上。
| 云环境 | 自托管沙箱 | |
|---|---|---|
| 工具运行位置 | Anthropic 托管的沙箱 | 您的基础设施 |
| 网络可达范围 | Anthropic 的出口控制 | 您的网络策略 |
| 文件和 GitHub 仓库挂载 | 由 Anthropic 管理 | 由您管理 |
| 生命周期 | 由 Anthropic 管理 | 由您管理 |
当代理需要操作不能离开您网络边界的数据、访问不可公开路由的内部服务,或在您组织自己的合规和审计控制下运行时,自托管是一个很好的选择。
有关零数据保留和 HIPAA BAA 资格,请参阅 API 和数据保留。
自托管控制代理的代码在哪里执行。MCP 隧道控制 Anthropic 如何访问您网络中的 MCP 服务器。它们是相互独立的:在 Anthropic 云沙箱中运行的会话仍然可以通过隧道访问私有 MCP 服务器,而自托管会话可以使用隧道化或公共的 MCP 服务器。当您希望执行和工具访问都保留在您的边界内时,请同时使用两者。要在不运行隧道的情况下为代理提供来自您网络内部 MCP 服务器的工具,您还可以将服务器包装为自定义工具,由您的 worker 提供服务。
本指南描述了如何使用任何通用沙箱平台构建 worker。还提供了针对特定平台的其他指南:AWS Lambda MicroVMs、Blaxel、Cloudflare、Daytona、E2B、GKE Agent Sandbox、Modal、Namespace、Superserve 和 Vercel。
环境 worker 是您在自己的基础设施上运行的进程。它从 Anthropic 接收工具执行请求并在本地运行它们。self_hosted 环境充当工作队列:当一个会话被分配给它时,Anthropic 将该会话作为工作项入队。您的 worker 从该队列中认领工作项,为每个工作项生成一个执行上下文,下载代理的技能(可重用的、基于文件系统的资源,为代理提供特定领域的专业知识),运行工具调用,并将结果回传。
工作项通过轮询环境的队列来认领:可以由持续轮询的常驻 worker,或由在 session.status_run_started 时唤醒并开始轮询的 webhook 触发的处理程序来完成。
CLI 和 SDK 都附带了预构建的 worker。ant CLI 仅支持常驻模式;SDK 同时支持常驻和 webhook 触发两种模式。两者都是可配置的:有关 CLI 标志,请参阅参考文档中的自托管 worker;有关 SDK 选项,请参阅本页的 SDK 辅助工具。如需更多控制,请直接调用 Environments Work 端点并实现您自己的 worker。
/workspace:**工具执行和技能下载的系统默认工作目录。CLI 的 --workdir 标志默认为当前目录;传递 --workdir /workspace 以匹配系统默认值。技能会下载到 <workdir>/skills/<name>/。如果您使用不同的工作目录,请更新代理的系统提示,以便 Claude 可以找到技能文件。/mnt/session/outputs 指令,因此最终交付物会落在代理在您的沙箱文件系统中写入的任何位置,通常在工作目录下。您需要:
/bin/bash 位于该确切路径。worker 的 bash 工具会直接调用它,而不查询 PATH。TypeScript SDK 还需要 PATH 上有 unzip 和 tar,以及 Node.js 22 或更高版本;Python 和 Go SDK 使用其标准库进行归档提取,没有额外的二进制文件要求。ant CLI 或 Anthropic SDK(Python、TypeScript 或 Go)。在 Claude Platform on AWS 上,worker 使用 AWS IAM(SigV4)或在 AWS Console 中生成的 API 密钥进行身份验证,而不是环境密钥。将 AnthropicSelfHostedEnvironmentAccess 托管策略附加到您的 worker 运行所使用的 IAM 主体。在 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。然后在 worker 主机上导出环境 ID 和密钥:
export ANTHROPIC_ENVIRONMENT_KEY="sk-ant-oat01-..."
export ANTHROPIC_ENVIRONMENT_ID="env_..."技能可以包含代理可以直接运行的可执行文件。CLI 和 SDK worker 在提取技能包时会保留其中记录的可执行权限。如果您手动实现技能下载,则需要自行负责设置可执行权限。
选择常驻模式以获得最简单的设置:一个长期运行的进程持续轮询队列,只需要出站 HTTPS。选择 webhook 触发模式以避免运行空闲的轮询器;它需要一个 Anthropic 可以访问的 webhook 端点(有关端点设置和签名验证,请参阅 Webhooks)。
安装 ant CLI
在 worker 主机上运行此命令。
对于 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 发布页面上找到所有版本。
运行 worker
进程内
ant beta:worker poll 认领分配给该环境的工作项,下载技能,在工作目录中执行工具调用,并将结果回传。它从环境变量中读取 ANTHROPIC_ENVIRONMENT_KEY 和 ANTHROPIC_ENVIRONMENT_ID。
ant beta:worker poll \
--workdir "/workspace"worker 在收到 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:每个已认领的工作项调用一次
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 提供了三个不同控制级别的辅助工具。EnvironmentWorker 涵盖了大多数用例;当您需要启动自己的每会话进程或针对已认领的会话运行工具时,可以使用较低级别的辅助工具。
EnvironmentWorker:**开箱即用的 worker。端到端处理轮询、设置和执行。
.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():**将工具列表作为 tools 传递给 client.beta.sessions.events.tool_runner()。要构建该列表,请自行设置 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:
# skills 已下载到 /workspace/skills/<name>/
tools = beta_agent_toolset_20260401(env)在单独的 shell 中,将 ANTHROPIC_API_KEY 设置为您的 Claude API 密钥(而不是环境密钥),确认 workers_polling 至少为 1:
ant beta:environments:work stats --environment-id "$ANTHROPIC_ENVIRONMENT_ID"如果 workers_polling 保持为 0,则 worker 没有连接到队列:请确认 worker 主机上已设置 ANTHROPIC_ENVIRONMENT_KEY 和 ANTHROPIC_ENVIRONMENT_ID。有关完整的统计信息响应和其他语言示例,请参阅读取队列深度。
worker 运行后,创建一个以该环境为目标的会话。将 AGENT_ID 设置为您在开始之前中记下的代理 ID。会话进入环境的工作队列并在那里等待,直到 worker 认领它;如果没有 worker 连接,会话将保持排队状态而不会失败。
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 标志的完整列表,请参阅参考文档中的自托管 worker;有关 SDK 辅助工具选项,请参阅 SDK 辅助工具。
自定义工具是由您自己的代码执行的工具:代理发出 agent.custom_tool_use 事件并等待匹配的 user.custom_tool_result。worker 可以充当该代码,并且由于它在您的沙箱内运行,该工具可以访问您为沙箱配置的内部服务、凭证和网络出口,仅此而已。环境密钥授权发布自定义工具结果,因此您的 Claude API 密钥不会出现在 worker 主机上。
提供自定义工具需要 SDK worker:ant CLI worker 无法注册自定义工具实现。在每会话一个沙箱的模式中,在沙箱内使用 handle_item()(TypeScript 中为 handleItem,Go 中为 HandleItem)运行 EnvironmentWorker,以替代 ant beta:worker run。
在代理上声明工具
向代理的 tools 添加一个 custom 条目,其 name 与您的 worker 注册的工具匹配。有关完整的声明格式,请参阅自定义工具。
{
"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"]
}
}向 worker 注册实现
通过 worker 的 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."""
# 在 worker 主机上运行:可调用沙箱能够访问的任何内容。
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())worker 只响应向其注册的工具。在代理上声明但未向任何 worker 或客户端注册的自定义工具会使会话以 requires_action 停止原因暂停,直到有东西发布其结果;有关事件流程,请参阅处理自定义工具调用。
MCP 连接器从 Anthropic 一侧连接到 MCP 服务器,因此服务器必须公开一个 Anthropic 可以直接或通过 MCP 隧道访问的 HTTP 端点。要使用只有您的网络可以访问的服务器,请改为让 worker 充当 MCP 客户端,并将服务器的工具声明为自定义工具。MCP 服务器不需要来自您网络外部的入站连接;Anthropic 接收您在代理上声明的工具定义、每次调用的输入以及您的 worker 回传的结果。在运行时,模型像调用任何其他自定义工具一样调用包装的工具:
agent.custom_tool_use 事件。user.custom_tool_result 发布。SDK 的客户端 MCP 辅助工具将服务器的工具转换为 worker 接受的可运行工具;请在 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 一一映射到自定义工具的字段。如果服务器对其工具列表进行分页,请声明每一页;worker 必须列出相同的页面。
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 字段与自定义工具声明一一对应。cast
# 将 schema 字典原样传递给 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())从 worker 提供工具
在启动时连接到同一个 MCP 服务器,使用 MCP 辅助工具转换其工具,并将它们与内置工具集一起注册。在 worker 的整个生命周期内保持一个 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 个条目(每个包装的工具是一个条目,内置工具集再占一个)。API 会拒绝重复使用工具名称、以内置代理工具(如 bash 或 read)命名自定义工具,或使用保留的 mcp__ 前缀的声明。MCP 辅助工具会保留服务器的名称和描述,因此请根据需要重命名或裁剪。当两个服务器公开相同的工具名称时,请自行在带前缀的名称下定义包装器,并让它调用服务器的原始工具名称。additionalProperties 和 title。它拒绝自定义工具的 input_schema 中任何位置的引用关键字(如 $ref),因此请将 pydantic 等生成器分解到 $defs 中的模式内联化。它还拒绝顶层的 oneOf、anyOf 和 allOf,以及字母、数字、下划线、点和连字符之外的属性名称(1–64 个字符)。read_timeout_seconds 所做的那样。如果没有超时,挂起的调用只有在 TypeScript MCP SDK 的默认请求超时触发时(约一分钟)或 worker 自身的后备机制触发时才会变成错误结果:Python 中约为两分半钟,Go 中为两分钟,worker 会取消超过其 120 秒默认值的工具调用并发布错误结果。bash)所做的事情。只声明您打算让代理使用的工具。这些调用从您的监控或运维工具运行,使用您的 Claude API 密钥进行身份验证,以观察和管理 worker 集群。认领和保活循环在 worker 辅助工具内部处理,因此您无需直接调用这些端点。
这些端点接受您的组织 API 密钥或环境密钥。请使用您的组织 API 密钥从 worker 主机外部调用它们。在 worker 主机上设置 ANTHROPIC_API_KEY 会将组织范围的凭证暴露给代理工具调用。
work.stats 返回环境的队列状态:
depth 是等待被认领的项目数量。根据此值扩展您的 worker 集群或对积压发出警报。pending 是已被 worker 认领但尚未确认的项目数量。worker 辅助工具在处理每个项目之前会确认它,因此在正常运行中此值保持接近零;持续的非零值意味着 worker 在认领和确认之间停滞了。oldest_queued_at 是仍在队列中的最旧项目的时间戳,该项目正在等待被认领或已被认领但尚未确认;如果没有则为 null。workers_polling 是在过去 30 秒内进行过轮询的 worker 数量。将其用于存活性警报。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 请求处理特定会话的 worker 将其关闭。默认情况下,工作项会进入 stopping 状态:worker 在下一次租约心跳时注意到这一点,取消该会话正在进行的工具调用,并确认关闭,此时工作项变为 stopped。在请求体中传递 force: true(使用 CLI 时,传递 --force)可立即将工作项标记为 stopped,而无需等待 worker 的确认。
由于这些调用是从您的运维工具而非 worker 主机运行的,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)自托管沙箱环境的责任共担模型。
创建会话以运行您的代理并开始执行任务。
将 Claude 安全地连接到在您的私有网络中运行的 MCP 服务器,无需开放入站端口或将服务暴露到公共互联网。
Was this page helpful?