# 打开它

> 总开关、endpoint 所监听的那个端口，以及让它保持在本地的那四件事。

刚装好的机器对代理什么都不声明。代理访问只隔着一个开关，而这个开关是代替认证的那三道关卡里的第一道：总开关、按范围的那些开关，以及日志。

## 开关与端口 {#the-switch-and-the-port}

总开关默认是**关**的。在**代理**页面上把它打开（打开这个页面需要你本地角色里那个管代理的权限）；endpoint 随后在 `http://127.0.0.1:<port>/mcp` 上以 Streamable HTTP 监听。应用缩到托盘里运行时，代理同样连得上。

| 设置 | 作用 | 取值 | 默认值 |
| --- | --- | --- | --- |
| 启用代理访问（MCP） | 启动或停止这个 endpoint。关 = 没有 endpoint，什么都不声明。 | 开 / 关 | 关 |
| 端口 | endpoint 监听的本地端口。更改它会重启代理访问，页面上每一段连接代码也跟着更新。 | 1024–65535。代理访问搬不过去的端口，会在保存任何东西之前被拒绝：原因写在字段下方，字段退回到正在生效的端口，什么也不会重启。被拒绝的有六种：超出范围的值（“请输入 1024 到 65535 之间的数字。”）；在[远程访问](remote-access)上设定的 Web 服务器端口（“端口 N 已经是 Web 服务器的端口。请另选一个端口，或者先移动 Web 服务器。”）；[配置](connector-opcua-configuration)上 OPC UA 服务器的端口，无论服务器正在运行还是已经停止（“端口 N 已经是 OPC UA 服务器的端口。请另选一个端口，或者先移动服务器。”）；Connector 页面上[Modbus 服务器](connector-modbus-server)的端口，无论服务器开着还是关着（“端口 N 已经是 Modbus 服务器的端口。请另选一个端口，或者先移动 Modbus 服务器。”）；Connector 页面上[MQTT Broker](connector-mqtt-broker)的端口，无论 Broker 开着还是关着（“端口 N 已经是 MQTT Broker 的端口。请另选一个端口，或者先移动 MQTT Broker。”）；以及这台计算机上已经被别的东西占着的端口（“端口 N 在这台计算机上已被占用。请关闭占用它的程序，或者另选一个端口。”）。 | 18181 |

开关旁边有一枚状态标签：开关关着时它写**已封闭**，开着时写**已开启**，这样 endpoint 的状态一眼就能从标签上读出来。

endpoint 下面有一个没有自己标题的计数，它汇总页面更下方**允许的范围**里的那些开关。第一行给四个等级各写出开着的范围有几个，数字前面的圆点在该等级至少有一个范围开着时亮成该等级的颜色，一个都没开时是灰色：所有范围都开着时，它写 5 **读取**、6 **配置**、4 **操作**、1 **恢复**。下面一行把它们加起来，写“16 个能力组中已开启 16 个”；只要有一个操作或恢复范围开着，它接着写出开着的组里有几个能写运行中的现场设备：“5 个实时写入”。它只数这些范围的开关，别的都不数，这样工作站暴露了多少，一眼就读得出来。总开关关着时，这个计数和 endpoint、端口一起变灰，但它仍在读那些开关，而开关保留着已保存的状态：它显示的是总开关重新打开时代理访问会打开什么。

开关关着的时候，endpoint 下面的**复制 URL**和**端口**是灰的，把指针停在其中任何一个上，就会说明原因：“代理访问未启用。请先在访问一节中启用。”**允许的范围**卡片也在它那些灰掉的开关上方写着同一句话。

页面上的一切都自动保存；没有“保存”按钮。

## 这个 endpoint 是怎么被保护的 {#how-the-endpoint-is-protected}

- **只在本地回环地址上。** 套接字绑在 `127.0.0.1` 上，绝不绑在网络接口上。厂区网络够不着它。
- **来自浏览器的请求被拒绝。** 光靠绑定还挡不住一个恶意网页把它自己的域名重绑到 127.0.0.1，所以 endpoint 还会检查浏览器伪造不了的那两个头：`Host` 不是本地的请求，或者带着一个非本地 `Origin` 的请求，会在它连会话都还没打开之前就被 403 拒绝。每一次拒绝都在[事件](events)里按**Agent**这个区域记进日志，所以一台正被某个浏览器标签页探测的工作站会留下痕迹。
- **endpoint 没有认证，这是有意的。** 那些关卡就是总开关、按范围的那些开关和日志。万一你要通过一条隧道把 endpoint 暴露出去，认证必须住在那条隧道上（见 [ChatGPT
  和其他走云端的客户端](agent-clients)）。
- **工具清单等于已启用的那些范围。** 一个已禁用范围的工具根本不会被声明出来：它们是不存在，而不是“答一句不行”。改动任何一个开关都会重启这个 endpoint，所以代理看见的东西永远和你允许的东西一致。两个帮助工具是唯一的例外：它们只读应用的文档，不读工作站的任何东西，所以不管开关怎么设，都随 endpoint 一起提供（[帮助](agent-tools#help)）。
