内容
# edt-bridge
一款用于 **1C:EDT** 的小型插件,通过 **模型上下文协议(MCP)** 将 EDT 的 **实时语义模型** 暴露给 AI 代理和其他工具,访问地址为 `http://127.0.0.1:8770/mcp`。
静态解析器读取源文件;而 edt-bridge 则询问正在运行的 IDE。它回答需要 **实时模型** 的问题:EDT 自身的验证问题、实际元数据结构和类型、语义交叉引用以及 **针对项目实际元数据的查询验证**。
> 读取 **和** 写入。仅限本地主机;写入需要令牌授权,默认为 dry-run。插件在 EDT 内运行,因此 EDT 必须与项目一同打开。
## 工具列表
| 工具 | 返回内容 |
|------|-----------------|
| `edt_project_errors` | EDT 验证问题(错误/警告):消息、严重程度、资源、行号。 |
| `edt_metadata_details` | 元数据对象的核心属性 **和结构** — 属性、表格部分、表单、命令、模板、维度、资源、枚举值 — 每个属性的值类型。 |
| `edt_metadata_objects` | 顶级元数据对象,可选按类型过滤(`Catalog`、`Document`、…)和名称子串。 |
| `edt_find_references` | 到元数据对象(元数据 + BSL)的传入引用,来自 EDT 的交叉引用索引。 |
| `edt_validate_query` | 验证 1C 查询针对项目的实时元数据:语法 **和** 语义(未知表/字段、类型错误),带有位置。 |
| `edt_go_to_definition` | 在 BSL 模块中解析符号定义的位置(行+列或偏移量):目标类型、名称、所属对象和位置。 |
| `edt_symbol_info` | BSL 模块中某个位置的类型/符号信息:光标下的元素和表达式的计算值类型(动态类型)。 |
| `edt_form_structure` | 管理表单的项目树(字段/组/表格/按钮/装饰)及其数据绑定,以及属性、命令、参数和事件处理程序。 |
| `edt_form_render` | 通过 EDT 的原生离屏渲染器(表单编辑器预览的引擎)将管理表单渲染为 PNG;选择界面变体(Taxi / 8.5)和主题。 |
**写入工具** 通过 EDT 自身的引擎(非文本编辑)修改模型。所有写入工具都 **需要令牌授权** 并且 **默认为 dry-run** (`apply=false` 返回计划,不会更改任何内容);`apply=true` 执行更改并序列化 `.mdo`。
| 写入工具 | 执行操作 |
|------------|--------------|
| `edt_add_attribute` | 向元数据对象添加属性(类型 / 类别 / 别名 / 注释),经过验证。 |
| `edt_modify_attribute` | 更改现有属性的类型、别名或注释。 |
| `edt_remove_attribute` | 删除属性(引用检查;如果引用则拒绝,除非强制)。 |
| `edt_rename` | 重命名对象或成员并 **级联更新元数据和 BSL 中的所有引用**,通过 EDT 的原生重构引擎(需要 `force` — 重命名是破坏性更改)。 |
| `edt_create_object` | 通过 EDT 的工厂和类型初始化器创建新的顶级对象(Catalog/Document/Enum/InformationRegister/…),在 Configuration 中注册。 |
| `edt_delete_object` | 删除对象或成员并 **级联删除元数据和 BSL 中的所有引用**,通过 EDT 的原生重构引擎;删除对象的 `.mdo` 并更新 Configuration(需要 `force` — 删除不可逆且具有破坏性)。 |
命名约定:工具为 `edt_*`(蛇形命名);参数为 camelCase(`projectName`、`fqn`、`queryText`);支持西里尔字母 FQN(`Справочник.Контрагенты`)。
## 要求
- **1C:EDT** 已安装并运行,项目在工作空间中打开。
- **JDK 17+** 用于构建(捆绑的字节码针对 Java 17,EDT 运行时)。
- 本地 **EDT 捆绑池** (用作离线构建目标)。在 **Windows** 上为 p2 池 `<your-home>\.p2\pool\plugins`;在 **macOS** 上,自包含池位于已安装组件内:`…/1C/1CE/components/1c-edt-<ver>-x86_64/1cedt (<ver>).app/Contents/Eclipse/plugins` (shell 构建自动检测)。
## 构建
**选项 A — 无 Maven** (最快;纯本地 JDK + EDT 池,无网络):
```powershell
# Windows — 默认值:-Pool %USERPROFILE%\.p2\pool\plugins, -JdkHome %JAVA_HOME%
powershell -ExecutionPolicy Bypass -File build-nomaven.ps1
# 或覆盖:
powershell -File build-nomaven.ps1 -Pool "D:\path\.p2\pool\plugins" -JdkHome "C:\path\to\jdk"
```
```bash
# macOS / Linux — 相同输出。默认值:--jdk-home from JAVA_HOME (或 `/usr/libexec/java_home -v 17`
# 在 macOS 上);--pool 从已安装的 1C:EDT 组件池自动检测。
./build-nomaven.sh
# 或覆盖:
./build-nomaven.sh --pool "/path/to/Contents/Eclipse/plugins" --jdk-home "/path/to/jdk-17"
```
生成 `build/com.e1c.fresh.edtbridge_0.0.1.<timestamp>.jar`。
**选项 B — Maven + Tycho** (标准,用于 CI)。编辑 `edt-bridge.target` 以指向您的池,然后:
```
mvn -f pom.xml clean verify
```
## 安装和运行
1. 将构建的 jar 复制到 EDT 的 `dropins/` 文件夹中 — Windows: `…/installations/<EDT>/1cedt/dropins/`;**macOS**: `…/1C/1CE/components/1c-edt-<ver>-x86_64/1cedt (<ver>).app/Contents/Eclipse/dropins/` (如果不存在则创建)。
2. **重启 EDT.** 启动时,插件在 `http://127.0.0.1:8770/mcp` 启动 MCP 服务器。
要以 **无界面模式** 运行 EDT(无 GUI 窗口),使用 `run-headless.ps1` (Windows)或 `run-headless.sh --workspace <ws>` (macOS / Linux)。
使用 curl 进行烟雾测试:
```bash
# 列出工具
curl -s -X POST http://127.0.0.1:8770/mcp -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# 调用工具
curl -s -X POST http://127.0.0.1:8770/mcp -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"edt_project_errors","arguments":{"projectName":"YourProject"}}}'
```
## MCP 客户端连接
在您的客户端的 `.mcp.json` 中添加一个 HTTP MCP 服务器条目(例如):
```json
{
"mcpServers": {
"edt-bridge": { "type": "http", "url": "http://127.0.0.1:8770/mcp" }
}
}
```
最小服务器通过 HTTP 使用纯 JSON-RPC (`initialize` / `tools/list` / `tools/call`) — 无 SSE 或额外 SDK。
## 仪表盘
在浏览器中打开 `http://127.0.0.1:8770/` 以访问内置仪表盘:服务器状态、打开的 EDT 项目和每个工具的交互式运行器。支持浅色/深色主题和 EN/RU 语言切换(默认为浏览器区域设置)。
## 安全
- **仅绑定到 `127.0.0.1`** — 绝不使用公共接口。
- **写入受保护**:每个写入工具都需要配置的令牌,默认为 dry-run,仅对您自己的本地 EDT 模型进行操作;`edt_rename` 和 `edt_delete_object` 还需要显式的 `force`。无代码执行:`edt_validate_query` 仅解析和验证。
- 可选 **共享密钥令牌** — 设置 `EDT_BRIDGE_TOKEN` (或 `-Dedt.bridge.token=`)并发送 `Authorization: Bearer <token>` (或 `X-Edt-Bridge-Token: <token>`)。任何本地进程都可以访问该端口,因此为共享机器设置令牌。
- 端口覆盖:`EDT_BRIDGE_PORT` / `-Dedt.bridge.port=`。
## 状态和路线图
- **第一阶段(读取)+ 第二阶段(写入)— 完成.** 15 个工具:9 个读取 + 6 个写入(上文)。
- **后续阶段:** 调试(驱动 EDT 的 BSL 调试器)、测试运行 — 此处不涉及。
## 许可证
[Apache License 2.0](LICENSE). 参见 [NOTICE](NOTICE) 和 [ORIGIN.md](ORIGIN.md).
---
# Russian
一款用于 **1C:EDT** 的小型插件,通过 **模型上下文协议(MCP)** 将 EDT 的 **实时语义模型** 暴露给 AI 代理和其他工具,访问地址为 `http://127.0.0.1:8770/mcp`。
静态解析器读取源文件;而 edt-bridge 则询问正在运行的 IDE。它回答需要 **实时模型** 的问题:EDT 自身的验证问题、实际元数据结构和类型、语义交叉引用以及 **针对项目实际元数据的查询验证**。
> 读取 **和** 写入。仅限本地主机;写入需要令牌授权,默认为 dry-run。插件在 EDT 内运行,因此 EDT 必须与项目一同打开。
## 工具列表
| 工具 | 返回内容 |
|------------|----------------|
| `edt_project_errors` | EDT 验证问题(错误/警告):消息、严重程度、资源、行号。 |
| `edt_metadata_details` | 元数据对象的属性 **和结构** — 属性、表格部分、表单、命令、模板、维度、资源、枚举值 — 每个属性的值类型。 |
| `edt_metadata_objects` | 顶级元数据对象,可选按类型过滤(`Catalog`、`Document`、…)和名称子串。 |
| `edt_find_references` | 到元数据对象(元数据 + BSL)的传入引用,来自 EDT 的交叉引用索引。 |
| `edt_validate_query` | 验证 1C 查询针对项目的实时元数据:语法 **和** 语义(未知表/字段、类型错误),带有位置。 |
| `edt_go_to_definition` | 在 BSL 模块中解析符号定义的位置(行+列或偏移量):目标类型、名称、所属对象和位置。 |
| `edt_symbol_info` | BSL 模块中某个位置的类型/符号信息:光标下的元素和表达式的计算值类型(动态类型)。 |
| `edt_form_structure` | 管理表单的项目树(字段/组/表格/按钮/装饰)及其数据绑定,以及属性、命令、参数和事件处理程序。 |
| `edt_form_render` | 通过 EDT 的原生离屏渲染器(表单编辑器预览的引擎)将管理表单渲染为 PNG;选择界面变体(Taxi / 8.5)和主题。 |
**写入工具** 通过 EDT 自身的引擎(非文本编辑)修改模型。所有写入工具都 **需要令牌授权** 并且 **默认为 dry-run** (`apply=false` 返回计划,不会更改任何内容);`apply=true` 执行更改并序列化 `.mdo`。
| 写入工具 | 执行操作 |
|-------------------|------------|
| `edt_add_attribute` | 向元数据对象添加属性(类型 / 类别 / 别名 / 注释),经过验证。 |
| `edt_modify_attribute` | 更改现有属性的类型、别名或注释。 |
| `edt_remove_attribute` | 删除属性(引用检查;如果引用则拒绝,除非强制)。 |
| `edt_rename` | 重命名对象或成员并 **级联更新元数据和 BSL 中的所有引用**,通过 EDT 的原生重构引擎(需要 `force` — 重命名是破坏性更改)。 |
| `edt_create_object` | 通过 EDT 的工厂和类型初始化器创建新的顶级对象(Catalog/Document/Enum/InformationRegister/…),在 Configuration 中注册。 |
| `edt_delete_object` | 删除对象或成员并 **级联删除元数据和 BSL 中的所有引用**,通过 EDT 的原生重构引擎;删除对象的 `.mdo` 并更新 Configuration(需要 `force` — 删除不可逆且具有破坏性)。 |
命名约定:工具为 `edt_*`(蛇形命名);参数为 camelCase(`projectName`、`fqn`、`queryText`);支持西里尔字母 FQN(`Справочник.Контрагенты`)。
## 要求
- 已安装并运行 **1C:EDT**,项目在工作空间中打开。
- **JDK 17+** 用于构建(捆绑的字节码针对 Java 17,EDT 运行时)。
- 本地 **EDT 捆绑池** (用作离线构建目标)。在 **Windows** 上为 p2 池 `<your-home>\.p2\pool\plugins`;在 **macOS** 上,自包含池位于已安装组件内:`…/1C/1CE/components/1c-edt-<ver>-x86_64/1cedt (<ver>).app/Contents/Eclipse/plugins` (shell 构建自动检测)。
## 构建
**选项 A — 无 Maven** (最快;纯本地 JDK + EDT 池,无网络):
```powershell
# Windows
powershell -ExecutionPolicy Bypass -File build-nomaven.ps1
# 或覆盖路径:
powershell -File build-nomaven.ps1 -Pool "D:\path\.p2\pool\plugins" -JdkHome "C:\path\to\jdk"
```
```bash
# macOS / Linux — 相同输出。默认值:--jdk-home from JAVA_HOME (或
# `/usr/libexec/java_home -v 17` 在 macOS 上);--pool 从已安装的 1C:EDT 组件池自动检测。
./build-nomaven.sh
# 或覆盖路径:
./build-nomaven.sh --pool "/path/to/Contents/Eclipse/plugins" --jdk-home "/path/to/jdk-17"
```
生成 `build/com.e1c.fresh.edtbridge_0.0.1.<timestamp>.jar`。
**选项 B — Maven + Tycho** (标准,用于 CI)。编辑 `edt-bridge.target` 以指向您的池,然后:
```
mvn -f pom.xml clean verify
```
## 安装和运行
1. 将构建的 jar 复制到 EDT 的 `dropins/` 文件夹中 — Windows: `…/installations/<EDT>/1cedt/dropins/`;**macOS**: `…/1C/1CE/components/1c-edt-<ver>-x86_64/1cedt (<ver>).app/Contents/Eclipse/dropins/` (如果不存在则创建)。
2. **重启 EDT.** 启动时,插件在 `http://127.0.0.1:8770/mcp` 启动 MCP 服务器。
要以 **无界面模式** 运行 EDT(无 GUI 窗口),使用 `run-headless.ps1` (Windows)或 `run-headless.sh --workspace <ws>` (macOS / Linux)。
使用 curl 进行烟雾测试:
```bash
curl -s -X POST http://127.0.0.1:8770/mcp -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```
## MCP 客户端连接
在您的客户端的 `.mcp.json` 中添加一个 HTTP MCP 服务器条目(例如):
```json
{
"mcpServers": {
"edt-bridge": { "type": "http", "url": "http://127.0.0.1:8770/mcp" }
}
}
```
最小服务器通过 HTTP 使用纯 JSON-RPC (`initialize` / `tools/list` / `tools/call`) — 无 SSE 或额外 SDK。
## 仪表盘
在浏览器中打开 `http://127.0.0.1:8770/` 以访问内置仪表盘:服务器状态、打开的 EDT 项目和每个工具的交互式运行器。支持浅色/深色主题和 EN/RU 语言切换(默认为浏览器区域设置)。
## 安全
- **仅绑定到 `127.0.0.1`** — 绝不使用公共接口。
- **写入受保护**:每个写入工具都需要配置的令牌,默认为 dry-run,仅对您自己的本地 EDT 模型进行操作;`edt_rename` 和 `edt_delete_object` 还需要显式的 `force`。无代码执行:`edt_validate_query` 仅解析和验证。
- 可选 **共享密钥令牌** — 设置 `EDT_BRIDGE_TOKEN` (或 `-Dedt.bridge.token=`)并发送 `Authorization: Bearer <token>` (或 `X-Edt-Bridge-Token: <token>`)。任何本地进程都可以访问该端口,因此为共享机器设置令牌。
- 端口覆盖:`EDT_BRIDGE_PORT` / `-Dedt.bridge.port=`。
## 状态和路线图
- **第一阶段(读取)+ 第二阶段(写入)— 完成.** 15 个工具:9 个读取 + 6 个写入(上文)。
- **后续阶段:** 调试(驱动 EDT 的 BSL 调试器)、测试运行 — 此处不涉及。
## 许可证
[Apache License 2.0](LICENSE). 参见 [NOTICE](NOTICE) 和 [ORIGIN.md](ORIGIN.md).