内容
# edt-companion-mcp
HTTP MCP服务器内建于 1C:EDT。OSGi插件启动本地服务器于
`http://127.0.0.1:6868/mcp`(JSON-RPC 2.0 + MCP)并提供 **39种工具**,
通过这些工具,AI代理(Claude Code、Cursor、Cline、任何MCP客户端)看到的
是与EDT相同的视图:类型化的元模型、带有未保存更改的BSL代码、
表单结构、СКД、XDTO,以及用于启动和调试yaxunit测试的Eclipse Debug API。
插件 **仅适用于当前在EDT中打开的工作区** —— 它不启动单独的EDT/1C进程。
## 功能
- **读取** 元数据和BSL:配置对象、表单(带有extInfo和处理程序)、
СКД、XDTO、预定义元素、角色权限、子系统、defined类型。通过BM事务,
它可以看到打开的编辑器的未保存更改,而不仅仅是磁盘上的内容。
- **搜索和导航**:BSL代码搜索、符号解析、
交叉引用索引(`find_object_references`)、方法调用层次结构。
- **元数据编辑** —— 统一的`edit_metadata`工具:创建和删除对象、
属性、表格部分、表单(通过标准`IFormGenerator`)、表单元素、
事件处理程序(自动生成BSL存根)、权限、订阅、defined类型、
XDTO模式、布局、СКД。它支持配置和扩展项目。
- **扩展中的继承**:通过标准`IModelObjectAdopter`的`adoptObject` /
`adoptChild` / `adoptModule`。
- **验证和构建**:EDT验证标记、`rebuild_project`、查询检查、
数据库同步(`sync_database`)—— 无需模态对话框。
- **yaxunit + 调试**:测试运行、报告读取、带有条件/命中次数的断点、
`getState` / `getVariables` / `evaluate`、逐步执行 —— 通过标准Eclipse Debug API。
完整的工具目录、参数约定和典型场景参见
[docs/llm-guide.md](docs/llm-guide.md)。
## 要求
- 1C:EDT 2025.2(已在2025.2.5 / EDT core 26.0.1上测试)。
- Java 17(随EDT附带)。
- 在EDT中打开的工作区,包含配置或扩展项目。
## 安装
插件以可执行的jar文件(drop-in bundle)的形式提供,位于
[Releases](../../releases)部分。
1. 从最新版本中下载`io.github.sekam68.edt.companion.mcp-<版本>.jar`。
2. 将jar文件复制到您的1C:EDT安装目录的`dropins`子目录中。典型路径为:
```
<1C:EDT安装目录>/components/1c-edt-<版本>-x86_64/dropins/
```
(例如 `C:/Program Files/1C/1CE/components/1c-edt-2025.2.5+2-x86_64/dropins/`)。
3. 重启1C:EDT。
4. 检查服务器是否已启动:
```
curl http://127.0.0.1:6868/health
→ {"status":"ok","tools":39}
```
如果 `/health` 没有响应 —— EDT可能未运行,或者bundle可能未激活(
在首次安装时,通过一次性运行带有 `-clean` 参数的EDT可以帮助解决问题)。
默认端口为 `127.0.0.1:6868`。您可以通过VM参数 `-Dedt.yaxunit.mcp.port=<端口>`
(在 `1cedt.ini` 中位于 `-vmargs` 之后)或环境变量 `EDT_YAXUNIT_MCP_PORT`
来修改它。系统属性优先级较高。
## 连接AI代理
在项目中的 `.mcp.json` 文件中(或在您的MCP客户端配置中)注册服务器:
```jsonc
{
"mcpServers": {
"edt-companion-mcp": {
"type": "http",
"url": "http://127.0.0.1:6868/mcp"
}
}
}
```
协议 —— 通过 `POST /mcp` 的JSON-RPC 2.0;支持 `initialize`、
`tools/list`、 `tools/call` 方法。代理通过 `tools/list` 获取工具列表和参数;
人类可读的参考手册参见 [docs/llm-guide.md](docs/llm-guide.md)。
## 工具目录(39)
| 分组 | 工具 |
|---|---|
| 工作区和环境 | `list_workspace_projects`、`list_applications`、`show_edt_version` |
| 读取BSL | `read_module_source`、`read_method_source`、`get_module_structure`、`search_in_code`、`resolve_symbol` |
| 写入BSL | `write_module_source` |
| 元数据(读取) | `list_metadata_objects`、`list_modules`、`get_object_details`、`get_form_layout`、`get_config_properties` |
| 分析 | `find_object_references`、`get_method_call_hierarchy`、`get_validation_errors` |
| 元数据编辑 | `edit_metadata`(统一的操作管理器) |
| XDTO | `read_xdto_package`、`edit_xdto_package` |
| 构建和数据库 | `rebuild_project`、`sync_database` |
| 查询 | `validate_query` |
| 平台文档 | `get_object_help`、`get_platform_docs` |
| yaxunit | `run_yaxunit`、`get_yaxunit_report` |
| 调试 | `addBreakpoint`、`removeBreakpoint`、`listBreakpoints`、`getState`、`getVariables`、`evaluate`、`resume`、`suspend`、`stepOver`、`stepInto`、`stepReturn`、`terminate` |
## 限制
- **无界面 / CI / 远程开发(无打开的EDT)** —— 服务器运行在EDT进程内;
无界面模式下,部分操作(包括 `sync_database`)不可用。
- **编辑现有BSL方法的代码** —— 插件读取模块、搜索代码、查找引用并
写入处理程序的存根,但方法的主体由代理使用其文件工具进行编辑。