MCP服务器
LLM生成的网络和基础设施的即时一次性集群。
假设LLM编写VyOS NAT配置、OpenWrt防火墙规则集或bash脚本来强化CentOS集群。在它接触到你的环境之前,你在哪里运行它?Antrieb为LLM提供了一个可丢弃的多节点集群,具有真实的VM和真实的网络,以尝试它生成的内容。打破它,快速重置,再试一次。没有清理。
LLM生成的代码在生产中的目标操作系统和设备相同:CentOS Stream、Ubuntu、Debian、Alma、Alpine、VyOS、OPNsense、SONiC、OpenWrt。具有每个NIC分配的多网络拓扑。不是容器,不是微型虚拟机,也不是一些未知的Linux——你真正的舰队运行的内核和包都是一样的。
根访问、专用网络、节点间无密码SSH。每个集群10分钟。每次都要重新开始。即时集群改变了LLM出错的经济学。
快速开始
Antrieb是一个远程MCP服务器。无需安装。将其添加到您的配置中并开始配置。
克劳德网络/聊天GPT
使用基于web的AI客户端,将Antrieb添加为自定义连接器。
在 claude.ai首选 设置→ 连接器,单击 添加自定义连接器.输入:
- 姓名:
Antrieb - 网址:
https://antrieb.sh/mcp
点击 添加那么 连接 然后登录。回到聊天中,尝试以下操作:
*创建一个3节点的Kubernetes集群,其中node1作为控制平面和worker运行,node2/node3作为纯worker运行。安装带有3个pod和pod反亲和的nginx。*
演练视频:
MCP客户端(克劳德桌面、克劳德代码、Codex、自定义客户端)
在获取免费API密钥 驱动器.sh/dash,然后将其添加到MCP客户端配置中(例如。 .mcp.json 克劳德桌面版):
克劳德代码
将此JSON放入当前文件夹中的一个名为 .mcp.json克劳德代码会自动找到它。
{
"mcpServers": {
"antrieb": {
"type": "http",
"url": "https://antrieb.sh/mcp",
"headers": {
"Authorization": "Bearer ant_YOUR_API_KEY"
}
}
}
}法典
将此TOML内容放入 ./.codex/config.toml。然后设置 ANTRIEB_TOKEN 在启动Codex之前,使用API键创建环境变量。
[mcp_servers.antrieb]
url = "https://antrieb.sh/mcp"
bearer_token_env_var = "ANTRIEB_TOKEN"没有本地安装,没有依赖关系,没有Docker。
运作原理
您的LLM通过5个工具控制真实的VM:
1. provision → Spin up a cluster (sub-second per VM, declare custom networks and NICs)
2. exec → Run commands on any node (cluster-scoped env vars auto-injected)
3. save → Snapshot a node as an image, or save a runbook
4. search → Discover images, runbooks, or active clusters
5. delete → Destroy a cluster, or decommission a saved artifactLLM驱动整个工作流程:配置集群,逐个命令安装软件,验证每个步骤,并迭代直到它工作。Antrieb提供基础设施;LLM提供情报。
工作流示例
You: provision 3 ubuntu nodes and install nginx on all nodes
LLM: provision(cluster: ["ubuntu24.04 x3"])
→ { session_id: "abc12", nodes: ["node1", "node2", "node3"], provision_time_ms: 720 }
LLM: exec(session_id: "abc12", node: "node1", command: "apt-get update && apt-get install -y nginx")
→ { exit_code: 0, stdout: "..." }
LLM: exec(session_id: "abc12", node: "node1", command: "systemctl start nginx && curl -s localhost")
→ { exit_code: 0, stdout: "Welcome to nginx..." }
LLM: save(type: "image", session_id: "abc12", node: "node1", name: "my-nginx", commands: [...])
→ { ani: "antrieb:my-nginx:v1" }
LLM: delete(type: "cluster", name: "abc12")
→ { success: true }可用图像
基础图像
| ANI | 描述 |
|---|---|
ubuntu24.04 | Ubuntu 24.04 LTS:apt、bash、Python 3、curl、wget、jq |
almalinux9 | AlmaLinux 9(兼容RHEL):dnf、bash、Python 3 |
centos-stream10 | CentOS流10:dnf、bash、Python 3 |
debian13 | Debian 13:apt、bash、Python 3、curl、wget、jq |
alpine | Alpine Linux 3.23:apk,最小,musl-libc |
sonic | SONiC:数据中心交换机的开源网络操作系统 |
vyos | VyOS:基于Linux的路由器/防火墙,具有统一的CLI |
openwrt | OpenWrt 25.12:具有UCI配置的基于Linux的固件 |
opnsense | OPNsense:基于FreeBSD的防火墙/路由器,带web UI |
堆叠图像
堆栈图像是通过使用附加包丰富基础图像而创建的自定义图像。
| ANI | 描述 |
|---|---|
terraform-aws | 具有真实AWS的地形(免费层、Antrieb的凭据、Vault代理的STS) |
ansible-controller | 具有集合的可解析控制节点 |
podman | Podman、Buildah、Skopeo(无根、Docker-API兼容) |
mongodb | 用于数据库配置和集成测试的MongoDB服务器映像 |
postgresql | SQL数据库测试的PostgreSQL服务器映像 |
vault | HashiCorp Vault映像用于机密工作流程和Terraform支持的凭据 |
mariadb | MySQL兼容数据库测试的MariaDB服务器映像 |
nginx | 用于web服务器和反向代理场景的NGINX映像 |
helm-k3s | 适用于轻量级Kubernetes场景的带Helm的K3 |
asterisk-pbx | 用于SIP和电话场景的Asterisk PBX映像 |
使用 search 发现所有可用的带有完整描述的映像,或者只是指定一个发行版名称,Antrieb会选择正确的一个。
集群网络
网络是对 provision,不是事后的想法。每个集群都是 L2与其他集群隔离 (即使是您自己的),具有主机名解析、自身节点之间的无密码SSH以及自动注入每个节点的集群范围的env变量 exec 电话。什么 *变化* 运行之间是节点如何连接和由可选组件控制的 networks 和 nics 参数打开 provision.
有两种模式: 默认网络 (平面,一个子网,可上网)和 已申报网络 (一流的多子网、多NIC拓扑)。
每个集群(两种模式)
- 主机名解析:
node1,node2,node3在/etc/hosts在每个节点上。 - 无密码SSH: 每个集群的ed25519密钥对分布到所有节点。
ssh node2 hostname只是工作。 - L2隔离: 无论CIDR重叠或帐户如何,不同集群中的节点都无法相互访问。
- 每个人的环境都不一样
exec:NODE_NAME,NODE_INDEX,NODE_IP,CLUSTER_HOSTS(多行IP NAME--下降为/etc/hosts),CLUSTER_SSH_PUBKEY,CLUSTER_SSH_PRIVKEY.
LLM: exec(node: "node1", command: "ssh node2 hostname")
→ { stdout: "node2" }默认网络(当 networks / nics 省略)
LLM: provision(cluster: ["ubuntu24.04 x3"])你得到:
- 一个自动分配
/24网络名称default,每个节点一个NIC,DHCP分配的IP。 - 互联网出口 通过精心策划的端口分配列表(HTTP、HTTPS、DNS、SSH、包管理器)。任意出站被阻止。
- 没有路由器VM,没有防火墙区域,没有要配置的拓扑。节点之间以及与外界进行通信。
每当 *网络* 这不是你正在测试的——应用程序级工作、特定发行版的配置、Ansible剧本、CI管道、三个ubuntus上的Kubernetes。
申报网络(多网络、多NIC)
通过 networks 和 nics 当拓扑本身是测试对象时:路由器、防火墙、DMZ、隔离的后端子网、双宿主节点、BGP网格。
LLM: provision(
cluster: ["vyos", "ubuntu24.04", "ubuntu24.04"],
networks: [
{ name: "wan", egress: true },
{ name: "lan", cidr: "10.10.1.0/24", egress: false }
],
nics: {
node1: [{ net: "wan" }, { net: "lan" }], // vyos: dual-homed router
node2: [{ net: "lan" }], // ubuntu backend
node3: [{ net: "lan" }] // ubuntu backend
}
)合同:
- 每个声明的网络都是自己的L2段 拥有自己的DHCP服务器和自己的
/24省略时,CIDR会自动分配;仅/24支持。 egress: true--默认端口分配列表上可访问互联网。egress: false--流量停留在网络内部;没有默认路线。dhcp: true(默认)--平台分配IP。dhcp: false--您可以分配IP(当路由器VM拥有地址或您需要精确的/31链接时使用此功能)。- NIC订单很重要。 每个条目
nics.成为eth0,eth1, ...按照所列顺序。 .1每个启用DHCP的网络都保留了 用于平台网桥网关。路由器虚拟机应声明.254(或DHCP客户端)--分配.1导致ARP触发器。
这解锁了严肃的网络工作:带WAN/LAN区域的VyOS/OPNsense防火墙,SONiC作为L2交换机或L3路由器,OpenWrt及其 fw3 区域模型,反向代理局域网后面的nginx,BGP对等/31传输链路,发夹NAT,DNAT端口转发。每种模式的完整演练都在 @antrieb/* runbook库。
可重用的拓扑应该在运行手册中捕获。网络在以下期间被声明为内联 provision;如果相同的拓扑在不同场景中都很重要,请将拓扑、命令和验证步骤一起保存为runbook。
网络实验室示例
默认值 antrieb/* runbook库包括经过验证的场景,例如:
- VyOS: 基于区域的DMZ防火墙、DNAT端口转发、DHCP/DNS转发、DHCP中继、双WAN故障转移、基于策略的路由、eBGP、OSPF、VRRP、WireGuard、IPsec、VLAN中继、QoS整形。
- SONiC: L2桥接、L3路由、VLAN分段、带策略的VLAN间路由、带FRR的BGP、OSPF、DHCP中继、LAG、SPAN镜像、VXLAN L2扩展。
- OPNsense: DNAT端口转发、三区DMZ、WireGuard road warrior、使用HAProxy的HTTPS负载平衡。
- OpenWrt : 家庭路由器NAT、访客区隔离、端口转发、dnsmasq静态DHCP和本地DNS覆盖。
- 服务拓扑: nginx反向代理,Ansible通过HAProxy负载平衡和故障转移演练管理nginx后端。
Runbook是作为可执行证明编写的:拓扑、命令、预期的数据包行为以及使用以下工具的验证步骤 tcpdump、路由表、连接跟踪、BGP/OSPF状态、DHCP跟踪、VPN握手和故障转移测试。
Runbook
Runbook是保存非平凡多节点场景的方法,甚至可以捕捉到可能太小而无法写博客的小陷阱。它们是具有LLM可以执行的结构的markdown文档:
## Topology required--适用于(映像、网络、NIC)的群集形状## Variables--占位符,如 `` 呼叫者在申请时间进行替换## Steps--编号;散文解释 *为什么*,带围栏的shell块是实际的命令,每个命令都注释了它所针对的节点## Verify--如何确认成功
保存一个 save(type: "runbook", session_id: "...", name: "...", body: "...markdown...")The session_id 必须指向其执行历史记录演示runbook的会话。把尸体拿来 search(type: "runbook", fq_name: "namespace/name").
Runbook补充图像:图像捕捉 安装状态 (包、配置被烘焙到qcow2中)。runbook捕获 工作流程 (产生工作系统的有序多节点操作)。对于具有多个节点的任何内容,都更喜欢Runbook,因为单个映像无法表达VM之间的协调。
你在组织名称空间中拯救生命的一切;这 antrieb/* 命名空间默认为只读。
自定义图像
将任何配置的节点另存为可重用映像:
- 提供基础图像
- 通过安装和配置软件
exec - 呼叫
save(type: "image", ...)带有成功命令列表 - 驱动器 generates
build-image.sh,startup.sh,以及说明 - 该图像可立即供将来使用
provision电话
现在试试
不需要MCP客户端。使用API密钥 curl:
# 1. Provision a single Ubuntu node
curl -s -X POST https://antrieb.sh/mcp \
-H "Authorization: Bearer ant_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"provision","arguments":{"cluster":["ubuntu24.04"]}}}'→ { "session_id": "abc12...", "nodes": ["node1"], "provision_time_ms": 680 }# 2. Run a command on the node
curl -s -X POST https://antrieb.sh/mcp \
-H "Authorization: Bearer ant_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"exec","arguments":{"session_id":"abc12...","node":"node1","command":"cat /etc/os-release | head -3"}}}'→ { "node": "node1", "exit_code": 0, "stdout": "PRETTY_NAME=\"Ubuntu 24.04 LTS\"\nNAME=\"Ubuntu\"\nVERSION_ID=\"24.04\"" }# 3. Tear it down
curl -s -X POST https://antrieb.sh/mcp \
-H "Authorization: Bearer ant_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"delete","arguments":{"type":"cluster","name":"abc12..."}}}'替换ant_YOUR_KEY使用API密钥和abc12...随着session_id从步骤1开始。
常见问题
为什么是安特里布?
人工智能正在进入运营的每一层:云、本地、遗留系统、安全、网络和边缘。错误配置云服务器是痛苦的。在现场错误配置一万个边缘设备是灾难性的。
Antrieb是LLM和Operations之间的验证层。在人工智能生成的基础设施代码能够触及您的环境之前,它必须在一个真实的、可丢弃的环境中证明自己,该环境与目标架构非常匹配,足以暴露操作故障。相同的操作系统,相同的软件包,相同的行为。不是容器。不是近似值。Antrieb是人工智能产生的运营变革的可审计试验场。
为什么是10分钟集群?
10分钟TTL主要不是关于计算限制。集群重建速度很快。TTL的存在是为了使验证可重复,并防止LLM累积意外状态。
不要保存实验室。保存学习成果。
- 状态漂移: LLM不能依赖于遗留文件、部分修复或之前尝试的隐藏更改。每种解决方案都必须从头开始。
- 再现性: 如果一个解决方案不能在新的集群上复制,它就不算数。
- 认知漂移: 长寿命集群让LLM过度承诺其第一个计划。它可能会不断修补一种损坏的方法,因为环境仍然存在,并且包含部分进展。硬TTL创建了一个强制检查点:LLM必须总结它所学到的东西,丢弃意外状态,选择更清晰的命令序列,并从头开始再现结果。
- 防止滥用: TTL还可以防止长期滥用,如扫描、机器人活动、挖掘或托管。
为什么集群是不可变的?
集群的架构在配置时是固定的:映像、节点数、网络和NIC分配。如果LLM需要不同的拓扑,它应该提供一个设计更好的新集群。
这防止了 建筑漂移没有不变性,LLM可以不断添加节点、网络、路由和异常,直到实验室不再与它应该验证的系统匹配。结果可能会“奏效”,但这只是因为错误周围的环境发生了变化。
不变性迫使拓扑成为一个明确的假设:
- 选择架构。
- 提供它。
- 测试实施情况。
- 如果架构有误,请丢弃它并提供一个更干净的架构。
这使得验证目标易于理解、可重复,并且值得保存为runbook。
免费吗?
对。在获取免费API密钥 驱动器.sh/dash.
每个虚拟机的资源规格是什么?
大多数Linux基础和堆栈映像都有4个vCPU、2 GB RAM和20 GB磁盘。网络设备和较小的边缘图像可能不同; search(type: "image") 返回当前规格和完整图像描述。
一个集群可以有多少个节点?
每个集群最多4个节点。如果您的拓扑需要一个专用的控制器节点(例如,管理车队的Ansible控制节点),则允许增加一个节点,使最大节点数达到5个。
我一次可以运行多少个集群?
每个帐户最多2个并发集群。
节点有互联网接入吗?
是的,默认情况下。默认网络上的每个节点都可以直接访问互联网,但出于安全原因,只允许使用某些端口。包管理器、curl、pip、npm:所有这些都按照你的期望工作。如果你声明显式网络 egress: false,这些网络上的节点与互联网完全隔离。
集群能持续多久?
经过身份验证的集群具有10分钟的硬TTL。在那之后,它们被完全抛弃了:计算、网络、一切。TTL不能扩展。如果您获得与前一个会话相同的IP地址,则VM是全新的。
当我的聊天会话结束时,集群会发生什么?
集群将一直存在,直到您删除它或它的TTL过期。然后,IP地址可以重新用于未来的VM。您的命令会单独记录,并可在仪表板中访问。
虚拟机真的是短暂的吗?我能得到一个脏节点吗?
是的,完全是短暂的。会话VM永远不会在会话之间重复使用。一旦完成或TTL到期,它们就会被销毁。您提供的每个节点都是全新的。
谁可以看到我的虚拟机上运行的命令?
只有你。没有其他人可以访问您的命令历史记录。
我的LLM会意外暴露命令日志中的敏感数据吗?
请不要在命令中包含机密或凭据等敏感数据。您可以通过仪表板访问命令日志,因此请相应地处理它们。
我的虚拟机是否与其他用户隔离?
对。集群内的节点可以相互连接,但一个节点不能连接到不同集群中的节点,包括您拥有的其他集群。要自己验证这一点,请告诉你的法学硕士: *配置两个单节点集群,获取每个节点的IP,然后通过SSH连接到每个节点,并尝试ping另一个节点* 你会看到ping失败。
我可以自己SSH到节点,而不仅仅是通过LLM吗?
不是的。所有的互动都要经过LLM。告诉它你想做什么,它就会为你做。一切都是对话。
记录了哪些数据?你储存我的命令吗?
对。所有命令都会记录在仪表板上,供您使用 驱动器.sh/dash.
这与哪些客户合作?
Claude.ai、ChatGPT Web、克劳德桌面、光标、Windsurf和克劳德代码。如果您的客户端支持通过HTTP的远程MCP服务器,那么它应该可以工作。
它适用于克劳德以外的模特吗?
对。Antrieb只是一个MCP服务器;情报完全来自你的法学硕士。它适用于您的MCP客户端支持的任何型号。
保存的图像需要多长时间才能准备好?
我们的目标是2分钟。最长为5分钟。Runbook可以立即保存——它们是元数据,而不是qcow2图像。
自定义图像和Runbook是私人的吗?
是的,默认情况下为私有。要在团队中共享,请访问您的个人资料 驱动器.sh/dash 并为您的组织设置命名空间。从那时起,您保存的所有内容都只能由您组织的成员访问。
Antrieb如何防止虐待?
- 命令记录和AI监控。 在每个节点上执行的每个命令都会被记录下来。我们使用人工智能来积极检测和防止滥用,包括加密货币挖矿、DDoS、垃圾邮件和未经授权的扫描。
- 集群限制。 每个用户最多2个并发集群。每个集群最多4个节点。
- 群集到群集隔离。 集群内的节点可以通信。即使在同一个帐户内,集群之间的节点也不能。
- 出口港允许通行。 默认网络上的出站流量仅限于一组精心策划的端口(HTTP、HTTPS、DNS、SSH、包管理器)。任意出站连接被阻止。网络声明
egress: false根本没有出站路径。
这和E2B有什么不同,Morph?
与E2B相比: E2B非常适合代码执行沙盒。它针对运行代码而不是基础设施进行了优化。你得到的是一个沙箱,而不是集群,而且环境在操作系统级别与你的不匹配。如果你正在测试infra(Ansible playbook、systemd行为、SELinux策略、网络),你需要真实的操作系统和真实的软件包。
vs变形云: Morph为您的代理提供了一个开发环境。Morph的devbox非常适合编码代理构建和迭代软件。Antrieb是用于基础设施工作的,在这里,对实际发行版的忠诚度很重要:Ubuntu、AlmaLinux、Alpine、Arch、SONiC,与您实际运行的操作系统相同,而不是定制的devbox。
这与仅仅使用Docker容器或GitHub代码空间有什么不同?
Docker容器共享一个主机内核,因此您无法在容器中可靠地测试SELinux策略、内核模块、systemd行为或特定于发行版的包怪癖。Antrieb为您的LLM真实虚拟机提供了与您在环境中运行的操作系统完全相同的操作系统。
除了Linux发行版之外,许多网络设备和基础设施平台(SONiC、Cisco IOS-XE、Palo Alto、F5、Juniper)仅以VM映像的形式发货,或者容器可用性有限。当容器版本存在时,它几乎总是真实事物的一个子集:缺失的功能、不同的API、不完整的行为。跟踪每个供应商的容器化版本实际支持的内容本身就是一个问题。使用VM,您可以运行真实的设备映像并获得完全的保真度。
代码空间是为人类构建的。打开浏览器或编辑器,四处单击,然后键入。Antrieb是为LLM构建的,用于验证它们的工作。您的LLM提供集群、运行命令、读取输出和迭代,所有这些都是通过同一对话中的工具调用完成的。这是给你的LLM一个截图点击和直接API之间的区别。
工具参考
provision
启动VM群集。返回会话句柄、节点名称、TTL以及配置所用的时间。节点获得私有IP, /etc/hosts 条目,以及用于无密码SSH的共享ed25519密钥对。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
cluster | array | yes | VM拓扑。每个条目都是一个简写字符串("ubuntu24.04" =1vm, "ubuntu24.04 x3" =3个虚拟机)或一个对象 {image, count?}. |
networks | array | no | 每个群集专用网络。每一个都是 {name, cidr?, egress?, dhcp?} 或字符串 @namespace/name 引用已保存的规范。默认值:一个名为 default NAT出口。 |
nics | object | no | 按节点名称键入的每个节点NIC分配,例如。 { "node1": [{"net":"lan"}] }默认值:每个节点在第一个网络上都有一个NIC |
退货 session_id, nodes, provision_time_ms, ttl_seconds, expires_at.
exec
在特定节点上运行shell命令。返回stdout、stderr和退出代码。每个命令都可以访问集群环境变量(NODE_NAME, NODE_INDEX, NODE_IP, CLUSTER_HOSTS, CLUSTER_SSH_PUBKEY, CLUSTER_SSH_PRIVKEY)用于跨节点的协调。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
session_id | string | yes | 发件人 provision |
node | string | yes | 节点名称(例如。 "node1") |
command | string | yes | 要执行的文字shell命令 |
save
坚持一件艺术品。保存的工件存在于您组织的命名空间中,可以立即供将来使用 provision / search 电话。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 否 | "image" (默认)或 "runbook" |
name | string | yes | 小写字母和连字符标识符(变为 antrieb::v1 对于图像, @/ 用于Runbook) |
description | string | no | 搜索使用的简短人类描述(强烈建议用于Runbook——这是LLM在浏览模式下看到的) |
session_id | string | 如果 type=image 或 type=runbook | 对于图像,包含要快照的节点的会话。对于Runbook,其执行历史记录演示了该场景的会话 |
node | string | 如果 type=image | 要保存的节点 |
commands | array | if type=image | 在节点上执行的成功命令的有序列表 |
body | string | 如果 type=runbook | Markdown文档(请参见 Runbook 结构) |
search
浏览目录,或获取特定的runbook。两种模式: 浏览 (关键字或无参数→ 元数据列表)以及 获取 (type=runbook, fq_name=namespace/name → 包括全身的单个runbook,在应用之前需要)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 否 | "image" (默认), "cluster",或 "runbook" |
keywords | string | no | 名称、描述和fq_name的全文筛选器 |
fq_name | string | no | 按完全限定名获取特定runbook,并返回其完整的markdown正文。忽略图像和簇。 |
limit | number | no | 最大结果数(默认20,最大100) |
delete
销毁集群或停用已保存的工件。 antrieb/* 默认值永远不可删除。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 是 | "cluster", "image",或 "runbook" |
name | string | 是 | session_id 集群;短名称或 namespace/short fq_name用于其他所有内容 |
许可证
Apache 2.0
