本页目录
MCP 接入与 AI 二次开发
MCP 用于让 AI 客户端通过工具查询和配置 TGateway,并获取配套二次开发技能。连接地址为 TGateway 管理地址加 /mcp,协议类型选择 Streamable HTTP。
添加到 Codex
以下以 TGateway 管理地址 http://127.0.0.1:16100 为例,地址和端口请替换为实际部署值。连接其他电脑上的服务时,填写该服务可访问的 IP 或域名。
- 确认 TGateway 已启动,当前电脑能够打开其管理页面。
- 打开 Codex 设置,进入 MCP servers,点击 Add server。
- 按下表填写服务器信息并保存,按客户端提示重启连接。
| 参数名称 | 说明 |
|---|---|
| 名称 | 填写便于识别的名称,例如 tgateway。连接多个网关时使用不同名称。 |
| 传输类型 | 选择 Streamable HTTP。 |
| URL | 填写管理地址加 /mcp,本例为 http://127.0.0.1:16100/mcp。 |
用户不需要查找或复制 Bearer 令牌,也无需手动填写 Authorization 请求头。保存地址与点击认证是两个步骤,添加服务器后不一定立即弹出浏览器。
命令行也可添加并认证:
codex mcp add tgateway --url http://127.0.0.1:16100/mcp
codex mcp login tgateway浏览器授权
- 点击服务器旁的 Authenticate/认证。浏览器打开授权页后,核对应用为当前使用的客户端、服务地址为目标网关。授权页按浏览器语言自动显示中文或英文。
| 参数名称 | 说明 |
|---|---|
| 应用(Application) | 发起连接的 MCP 客户端,本例为 Codex。 |
| 服务地址(Service address) | 本次授权连接的网关 MCP 地址,应与添加服务器时填写的地址一致。 |
| 返回地址(Return after authorization) | 客户端自动生成的授权回调地址,无需手动填写或复制。 |
| 账号(Account) | 填写现有 TGateway 管理账号。 |
| 密码(Password) | 填写该管理账号的密码。 |
- 输入账号密码,点击 登录并授权/Sign in and authorize。客户端获得的操作权限与该账号一致。
- 浏览器显示 Authentication complete. You may close this window. 时,授权已完成,可以关闭此页并返回 Codex。该结果页由 Codex 提供,客户端负责凭据交换及后续续期。

-
返回 Codex,确认服务器工具已加载。在会话中先执行一次查询,核对连接对象,例如:
使用 tgateway MCP 列出当前通道,只查询,不修改配置。
权限与工具
工具由 TGateway 已注册的 WebAPI 自动提供,包括查询、分页、新增、更新、删除、导入导出及其他业务操作。实际范围取决于当前网关注册的接口与账号权限。
MCP 入口先验证身份;每次工具调用继续执行原接口权限及参数校验。工具出现在列表中不表示账号拥有执行权限。停用账号、撤销业务会话等安全策略仍然生效。
客户端取得的是独立 MCP 凭据。授权码单次使用,并绑定客户端、精确回调地址、目标服务及 PKCE 证明;刷新凭据使用后轮换。重放上次刷新凭据会撤销该授权。服务重启后需要重新认证。客户端退出或撤销授权后应清除保存的凭据。
已有自动化程序仍可携带现有业务 Bearer 令牌调用 /mcp。普通用户使用浏览器授权即可。
通过 MCP 获取二次开发技能
TGateway 提供随应用程序集嵌入、与当前网关版本配套的 tgateway-development 技能。AI 可以从已连接的网关读取公开契约、操作方法和示例,在没有产品源码的情况下开发表达式、脚本、自定义节点、规则流程、采集插件和数据转发插件。
读取入口与按需取用
- 完成上面的 MCP 认证,先让 AI 查询当前网关版本和已有资源,确认连接对象。
- 在实例返回的工具目录中查找
GetDevelopmentSkillFile对应工具。实际工具名称以客户端加载的目录为准,不要自行拼接前缀。调用时省略path,默认读取SKILL.md。 - 再以
path: "manifest.json"读取清单,核对gatewayVersion、targetFramework、pluginGenerator及示例入口。 - 按下表选择资料,再通过同一工具的
path参数读取。先读references/runtime-contracts.md,涉及保存、编译或接口验证时再读references/validation.md;无需每次把全部示例塞进会话。
以下是传给技能文件工具的参数示例,不是规则或插件配置:
{"path":"references/collect-plugins.md"}| 文件入口 | 用途 |
|---|---|
SKILL.md | 总入口、任务选型、代码形态与交付要求;不传 path 时读取此文件。 |
manifest.json | 当前网关版本、目标框架、插件生成器及示例索引。 |
references/runtime-contracts.md | 公开类型、变量访问、依赖和运行生命周期。 |
references/validation.md | 通过实例保存、编译、绑定、运行及核对结果。 |
examples/index.json | 脚本与节点示例索引,按需读取对应 .cs.txt。 |
examples/plugins/index.json | 采集、转发插件及独立工程的文件清单。 |
支持普通 HTTP API 的客户端可使用同一管理地址下的接口。以下技能文本与 ZIP 是公开开发资料,HTTP 接口允许匿名获取;MCP 连接仍按前文认证,实际配置、编译、调试等业务操作继续执行各自权限校验:
GET /api/gatewayscriptcontroller/getdevelopmentskillfile
GET /api/gatewayscriptcontroller/getdevelopmentskillfile?path=manifest.json
GET /api/gatewayscriptcontroller/downloaddevelopmentskill前两个接口读取文本,最后一个下载完整技能 ZIP。插件生成器 tools/TGateway.PluginsGenerator.dll 通过 ZIP 交付,不能当作文本通过 GetDevelopmentSkillFile 读取。MCP 下载工具可按返回的 bodyBase64、contentType、contentDisposition 恢复文件;客户端不支持二进制下载时,使用已授权的普通 HTTP 下载。
读取技能后,AI 可在当前会话按其说明工作,不要求先安装客户端技能。需要长期在本地复用时,解压完整技能包,并按所用 AI 客户端的技能发现机制安装;更换目标网关或版本后,重新核对清单并取用配套资料。技能包不包含产品完整运行包,也不会通过 MCP 自动获得服务器文件系统权限。
技能覆盖范围
| 开发任务 | 技能资料与交付内容 |
|---|---|
| 读写表达式、内存变量 | references/expressions.md:DataTrans、MemoryVariableDatatrans、读写换算及读前/写后扩展的选型。 |
| 动态上传模型 | references/models-and-storage.md:四类 DynamicModel_*,覆盖变量、设备、报警与插件事件。 |
| 关系库与时序库脚本 | references/models-and-storage.md:四类 DynamicSQL_*、TimeSeriesSQL_VariableBasicData 及对应入库契约。 |
| MQTT RPC、完整源码脚本 | references/mqtt-and-fullsource.md:MQTTDynamicRPC、FullSource 的参数、返回值、类成员或完整文件形态。 |
| 自定义节点 | references/custom-nodes.md:输入/输出/双向参数、InitAsync、ChangedAsync、StopAsync、状态与事件释放。 |
| 规则引擎 | references/rule-engine.md:查询真实节点目录、稳定 typeId 与端口、规则 JSON 包、校验、保存及重载验收。 |
| 采集插件 | references/collect-plugins.md:基类选择、通道、变量合包、普通读写、主动上报、取消与启停生命周期。 |
| 数据转发插件 | references/data-forward-plugins.md:组范围、四类模型、脚本与模板、批次上传、失败缓存和恢复补发。 |
| 配置属性、特殊方法 | references/plugin-properties-and-methods.md:动态属性、变量属性、生成目录、方法参数、方法变量与读写锁。 |
| 插件工程、打包与部署 | references/plugin-build-and-deploy.md:发布 DLL 引用、Analyzer 生成器、net10.0 工程、依赖清单、PluginDlls 安装与重启。 |
| 通讯调试与性能 | references/communication-debugging.md:对象身份、读写、特殊方法、报文监视、故障恢复、缓存补发及负载测量。 |
代码必须匹配使用入口:表达式是方法体,动态 SQL 等入口是类成员,FullSource 是完整文件,网页自定义节点是节点成员代码,插件则是独立 DLL 工程。不能把这些形式互相粘贴代替。具体操作参见 脚本开发说明、自定义节点开发说明、采集插件二开说明 和 业务插件二开说明。
插件从开发到部署
- 读取插件资料和
examples/plugins/index.json,下载完整 ZIP。随包提供 Modbus 采集、批量 HTTP 转发及工程示例;按索引保存文件并去掉.txt后缀。 - 取得目标网关同版本、同交付构建的发布 DLL 与 XML 文档。用支持
net10.0的 SDK 构建,GatewayRuntimeDir指向发布目录,GatewaySkillDir指向解压后的技能目录。生成器作为 Analyzer 参与编译,并核对生成目录及诊断。 - 交付插件 DLL、必要的第三方依赖、配置示例和版本/验证说明。宿主引用使用
Private=false,不要把整套宿主 DLL、密钥或数据库放入插件包。 - 停止自有测试实例,将 DLL 放入该实例项目数据根目录下的
PluginDlls顶层,再启动宿主。该目录取决于ProjectDirectory,不保证在可执行文件旁;子目录不会递归扫描。不要在运行中替换程序集。 - 打开 开发配置 → 插件管理,按插件名称筛选,核对采集/数据转发类型、版本与启用状态,再创建对应设备或转发目标。
外挂 DLL 需要网关支持动态加载;网页脚本热编译不是插件安装入口。仅有 MCP 连接而没有配套发布 DLL 时,可以完成资源查询和资料获取,但不能据此宣称已构建、安装插件。
随包工程的构建命令如下,路径按实际目录替换。两次命令使用相同的目标框架与 MSBuild 属性:
$env:DOTNET_ADD_GLOBAL_TOOLS_TO_PATH = 'false'
dotnet restore ./PlantGatewayPlugins.csproj -p:GatewayRuntimeDir=C:/GatewayRuntime -p:GatewaySkillDir=C:/Skills/tgateway-development
dotnet build ./PlantGatewayPlugins.csproj -c Release --no-restore -p:GatewayRuntimeDir=C:/GatewayRuntime -p:GatewaySkillDir=C:/Skills/tgateway-development -p:EmitCompilerGeneratedFiles=true环境设置仅作用于当前进程及子进程。生成器仅供编译,不复制到 PluginDlls;新增第三方依赖需在隔离部署中验证宿主解析,不通过覆盖宿主核心库解决冲突。
通讯与业务链验收
-
在 采集配置 选中设备,查看实时变量的值、质量和采集时间。再打开 协议调试 → 特殊方法,从目录选择方法并填写 JSON 参数。例如,用
ReadScaledInt16读取地址40001并按0.1缩放,核对实际返回值;地址和方法以所选插件为准。 -
通过 MCP 调试时,先查询
GetSubject对应工具,使用subjectType(CollectDevice或DataForwardTarget)加真实subjectId标识对象,再按返回模块选择读写或方法调用。CancellationToken由宿主注入,不填进业务参数数组。检查业务isSuccess、错误和实际返回值,HTTP 200 不能代替成功判定。 -
普通地址读写验证的是协议层;读写表达式、写前写后步骤还需用变量写入与读回验证。
BatchRead当前逐地址执行,不能用它的次数证明周期采集已经合包。 -
在 数据转发 中核对组范围、触发间隔、最大批量、目标健康状态和待转发数。可用每秒转发组内 20 个变量的配置进行验收;为组外变量填写目标属性不会将其纳入范围。接收端还需核对实际请求、条数和内容。
-
使用可控接收端验证拒绝、超时、断连、恢复和重启补发。
CacheEnable控制失败后是否保留重试数据,不表示正常路径完全不经过 CacheDB;重试可能重复,接收端按业务键做幂等。强杀前尚未持久化的内存批次可能丢失。 -
记录变量数、周期、合包/分片、请求数、耗时、失败率及 CPU/分配情况。复用客户端与组生产数据,避免逐变量通讯、全局扫描、重复序列化、无界并发和长期开启报文日志。
若客户端因 JsonElement 的 object 类型描述拒绝实际需要的参数数组或标量,不要把参数改成业务不接受的对象。保留错误信息,并通过已授权的普通 HTTP API 或页面调试验证;该结果不能记作该客户端的 MCP 调用已通过。
可直接使用的任务描述
连接当前 TGateway MCP,先读取 GetDevelopmentSkillFile 的 SKILL.md 和 manifest.json。
仅通过实例工具目录、技能资料和配套发布 DLL 开发,不读取产品源码。
按任务读取所需 references 和 examples,先查询现有设备、变量、脚本及节点目录。
实现车间 Modbus 采集和 HTTP 批量转发:连续寄存器按协议限制合包,
只发送指定转发组变量,保留失败重试并验证恢复补发。
先在独立测试实例与模拟器完成构建、插件发现、配置、通讯和重启验收。
交付工程、插件包、配置步骤及实测结果,列明未测范围;不写入生产设备。也可以把业务部分换成“温度读写换算”“报警状态节点及规则连线”或“自定义入库脚本”,并提供真实变量名、单位、触发条件和预期结果。技能提供契约和示例,生成内容仍需编译与业务验收;脚本和插件以网关进程权限执行。
核对操作与日志
- 查询系统状态或当前用户,核对连接的网关实例。
- 新建一条可删除的测试配置,查询、修改后删除。
- 打开“系统日志 → 操作日志”,查看“请求来源”:
MCP表示工具调用;WebApi表示普通 HTTP API 调用,包括管理前端。 - 变量写入及插件方法的 RPC 日志通过“操作源”区分
MCP与WebApi。
日志按原策略异步落库,不是所有查询接口都会记录操作日志。Gateway 普通成功 RPC 是否保存,仍受“RPC成功日志”设置控制。
文件上传工具的 _http.bodyBase64 传入文件 Base64;下载结果的 bodyBase64、contentType、contentDisposition 用于恢复文件。文件大小受原接口及 MCP 正文上限限制。
域名与反向代理
直连时自动使用当前请求的 IP 或域名及协议。反向代理保留外部 Host,并通过 X-Forwarded-Host、X-Forwarded-Proto 传递外部主机和协议,无需另外配置服务地址;代理需覆盖客户端传入的同名头,并传递单一值。
需要固定对外地址时,可选填 Mcp:PublicOrigin,显式配置优先于请求地址和转发头:
{
"Mcp": {
"PublicOrigin": "https://gateway.example.com"
}
}该值只含协议、主机及可选端口,不带路径、查询或片段。代理需保留 /.well-known/oauth-protected-resource/mcp、/.well-known/oauth-authorization-server、/mcp 和 /mcp/oauth/ 路径,保证浏览器与客户端访问同一公开来源。
常见问题
| 现象 | 处理方式 |
|---|---|
| 保存后没有弹浏览器 | 点击 Authenticate/认证,或执行 codex mcp login <名称>。 |
| 浏览器显示 Authentication complete | Codex 已接收授权回调,可以关闭此页并返回客户端;该结果页由 Codex 提供。 |
| 没有认证入口,仍提示缺少 Bearer | 确认运行支持 OAuth 的版本,移除先前静态 Authorization 或代登录脚本配置,重启连接并认证。 |
| 授权页打不开 | 核对管理地址、端口及发现路径;代理部署检查转发头,已配置固定对外地址时检查 Mcp:PublicOrigin。 |
| 工具提示无权限 | 为该账号授予对应接口权限,再重新认证。 |
| 工具返回业务错误 | 查看结构化状态与消息,核对参数、当前网关配置及业务限制。HTTP 成功不代表设备操作成功。 |
| 找不到技能工具 | 确认连接的是目标 TGateway、该部署包含二次开发技能接口,并刷新客户端工具目录。 |
| 技能版本或插件引用不匹配 | 从目标实例重新读取清单、下载技能 ZIP,并使用该实例配套发布 DLL;不要混用不同构建的程序集。 |
| NuGet 还原结果缺少 .NET 10 目标 | 当前 project.assets.json 不是针对本次 net10.0 目标还原的结果。核对 SDK、工程路径及条件属性,用相同 MSBuild 参数重新 dotnet restore,再构建;不要用 --no-restore 跳过缺失还原或降级框架。 |
| 重启后认证失效 | 点击认证重新登录。 |