MCP (Model Context Protocol) server plugin for 1C:EDT, enabling AI assistants (Claude, GitHub Copilot, Cursor, etc.) to interact with EDT workspace. - MCP Protocol 2025-11-25 - Streamable HTTP transport with SSE support - Project Information - List workspace projects and configuration properties - Error Reporting - Get errors, warnings, problem summaries with filters - Check Descriptio
npx mdskills install DitriXNew/edt-mcp@DitriXNew? Sign in with GitHub to claim this listing.Comprehensive MCP bridge for 1C:EDT with 67 tools, strong CI/testing, excellent setup docs
1[](https://github.com/DitriXNew/EDT-MCP/releases)23[](https://github.com/DitriXNew/EDT-MCP/actions/workflows/build.yml)4[](https://github.com/DitriXNew/EDT-MCP/actions/workflows/proxy.yml)5[](https://sonarcloud.io/summary/new_code?id=DitriXNew_EDT-MCP)6[](https://sonarcloud.io/summary/new_code?id=DitriXNew_EDT-MCP)7[](https://sonarcloud.io/summary/new_code?id=DitriXNew_EDT-MCP)8[](https://sonarcloud.io/summary/new_code?id=DitriXNew_EDT-MCP)910[](https://github.com/DitriXNew/EDT-MCP/actions/workflows/e2e-2026.1.yml)1112[](https://github.com/DitriXNew/EDT-MCP/actions/workflows/conformance-2026.1.yml)1314> **Build & Unit Tests**, **E2E**, and **MCP Conformance** all run on stock GitHub-hosted runners (cloud CI) — no docker image, no self-hosted runner. E2E and Conformance run against **EDT 2026.1** (currently build 2026.1.2): the setup step installs a headless EDT of that version on the runner via `p2 director`. E2E additionally imports the test fixtures into an empty workspace via the plugin's headless bootstrap (`EDT_MCP_IMPORT_PROJECTS`) and skips the live-infobase tools, so no 1C platform is needed. Each badge reflects its latest run.1516# EDT MCP Server1718MCP (Model Context Protocol) server plugin for 1C:EDT, enabling AI assistants (Claude, GitHub Copilot, Cursor, etc.) to interact with EDT workspace.1920> [!TIP]21> **Contributing / making changes?** Read [CLAUDE.md](CLAUDE.md) first — it's the code-conduct "minefield map": hard don'ts and the stop-and-think-twice zones for this codebase (BM transactions, the bilingual ru/en model, cascading rename, etc.). Detailed how-to lives in the skills under `.claude/skills/`.2223> [!IMPORTANT]24> **EDT version compatibility:**25> Built and CI-validated against 1C:EDT 2026.1 (Ruby), currently build 2026.1.2.2627## Features2829- 🔧 **MCP Protocol 2025-11-25** - Streamable HTTP transport with SSE support30- 📊 **Project Information** - List workspace projects and configuration properties31- 🔴 **Error Reporting** - Get errors, warnings, problem summaries with filters32- 📝 **Check Descriptions** - Get check documentation from markdown files33- 🔄 **Project Revalidation** - Trigger revalidation when validation gets stuck34- 🔖 **Bookmarks & Tasks** - Access bookmarks and TODO/FIXME markers35- 💡 **Content Assist** - Get type info, method hints and platform documentation at any code position36- 🧪 **Query Validation** - Validate 1C query text in project context (syntax + semantic errors, optional DCS mode)37- 🧩 **BSL Code Analysis** - Browse modules, inspect structure, read/write methods, search code, and analyze call hierarchy38- 🖼️ **Form Inspection** - Get PNG screenshots and YAML layout snapshots from the form WYSIWYG editor39- 🚀 **Application Management** - Get applications, update database, launch in debug mode, terminate EDT-launched 1С clients40- 🎯 **Status Bar** - Real-time server status with tool name, execution time, and interactive controls41- ⚡ **Interruptible Operations** - Cancel long-running operations and send signals to AI agent42- 🏷️ **Metadata Tags** - Organize objects with custom tags, filter Navigator, keyboard shortcuts (Ctrl+Alt+1-0), multiselect support43- 📁 **Metadata Groups** - Create custom folder hierarchy in Navigator tree per metadata collection, with a toolbar toggle to hide groups temporarily44- ✏️ **Metadata Refactoring** - Create top-level objects with EDT default content; rename/delete metadata objects with full cascading updates across BSL code, forms and metadata; add new attributes to existing objects45- 🛠️ **Tool Management** - Enable/disable tools by group, presets (Analysis Only, Code Review, Development), per-tool parameter defaults4647## Installation4849### From Update Site50511. In EDT: **Help → Install New Software...**522. Add update site URL: `https://ditrixnew.github.io/EDT-MCP/`533. Select **EDT MCP Server Feature**544. Restart EDT5556### From Windows command line</strong> - "one shot" very fast install5758Close your EDT (!) and run:5960```bash61rem Here "%VER_EDT% = 2025.2.3+30" just for example - please, set YOUR actual version !62set VER_EDT=2025.2.3+306364"\your\path\to\EDT\components\1c-edt-%VER_EDT%-x86_64\1cedt.exe" -nosplash ^65 -application org.eclipse.equinox.p2.director ^66 -repository https://ditrixnew.github.io/EDT-MCP/ ^67 -installIU com.ditrix.edt.mcp.server.feature.feature.group ^68 -profileProperties org.eclipse.update.reconcile=true69```7071### Installation Result7273<details>74Once the installation has been completed successfully, we will see the following:757677</details>7879After that, EDT will automatically monitor the update site and install available updates when detected.8081As well, we can also manually check via **Help → About → Installation Details → Select MCP → Update**8283### Required JVM flag for form screenshots8485The `get_form_screenshot` and `get_form_layout_snapshot` tools need EDT to be launched with the following JVM flag:8687```88-DnativeFormBufferedLayoutRender=true89```9091**Without it**, both tools return blank output (gray PNG / empty `elements` list).9293**Why:** EDT's `NativeRenderService` reads `nativeFormBufferedLayoutRender` once at class-load time. If it was unset at JVM startup, the singleton `HippoLayoutService` is constructed without its offscreen buffer handler, the C++ form renderer never writes captureable pixels back to Java, and the screenshot helper falls through to an SWT `Control.print()` of the native window — which on Windows produces a gray rectangle. Setting the flag at runtime via reflection does not help because the singleton has already been built.9495**How to add it (persistent, recommended):**96971. Close EDT.982. Open `1cedt.ini` (next to `1cedt.exe`, e.g. `C:\Program Files\1C\1CE\components\1c-edt-2025.2.6+4-x86_64\1cedt.ini`).993. After the `-vmargs` line, add:100101 ```102 -DnativeFormBufferedLayoutRender=true103 ```1044. Start EDT.105106**How to add it (one-shot, no install changes):**107108```cmd109"<path-to-EDT>\1cedt.exe" -data "<workspace>" -vmargs -DnativeFormBufferedLayoutRender=true110```111112The same flag is also recommended for production EDT use — it enables the buffered native renderer that EDT itself benefits from.113114If your screenshots still come back blank after adding the flag, verify with `-vmargs` actually appears before it in `1cedt.ini` (Eclipse stops parsing `-vmargs` block once it hits a non-`-D` line) and that EDT was fully restarted.115116### Configuration117118Go to **Window → Preferences → MCP Server**. The settings page has two tabs:119120> [!NOTE]121> **Display language.** The settings page and the tag dialogs are bilingual (Russian / English) and follow the Eclipse/EDT display language — the same `-nl` launch argument (or OS locale) that localizes the rest of EDT. Launch EDT with `-nl ru` for Russian or `-nl en` for English; any other locale falls back to English. The MCP tool surface itself (tool names, descriptions and errors) stays English regardless, as it is the AI wire contract.122123#### General Tab124125- **Server Port**: HTTP port (default: 8765)126- **Check descriptions folder**: Path to check description markdown files127- **Auto-start**: Start server on EDT launch128- **Plain text mode (Cursor compatibility)**: Returns results as plain text instead of embedded resources (for AI clients that don't support MCP resources)129- **Show tags in Navigator**: Display tags as decorations in the Navigator tree130- **Tag decoration style**: How tags are displayed — all tags as suffix, first tag only, or tag count131- **Server control**: Start, stop, and restart the MCP server directly from preferences132133#### Tools Tab134135Manage which tools are available to AI assistants. Tools are organized into groups that can be enabled or disabled together. See [Tool Management](#tool-management) for details.136137138139## Status Bar Controls140141The MCP server status bar shows real-time execution status with interactive controls.142143**Status Indicator:**144- 🟢 **Green** - Server running, idle145- 🟡 **Yellow blinking** - Tool is executing146- ⚪ **Grey** - Server stopped147148149150<details>151<summary><strong>User Signal Controls</strong> - Send signals to AI agent during tool execution</summary>152153**During Tool Execution:**154- Shows tool name (e.g., `MCP: update_database`)155- Shows elapsed time in MM:SS format156- Click to access control menu157158When a tool is executing, you can send signals to the AI agent to interrupt the MCP call:159160| Button | Description | When to Use |161|--------|-------------|-------------|162| **Cancel Operation** | Stops the MCP call and notifies agent | When you want to cancel a long-running operation |163| **Retry** | Tells agent to retry the operation | When an EDT error occurred and you want to try again |164| **Continue in Background** | Notifies agent the operation is long-running | When you want agent to check status periodically |165| **Ask Expert** | Stops and asks agent to consult with you | When you need to provide guidance |166| **Send Custom Message...** | Send a custom message to agent | For any custom instruction |167168**How it works:**1691. When you click a button, a dialog appears showing the message that will be sent to the agent1702. You can edit the message before sending1713. The MCP call is immediately interrupted and returns control to the agent1724. The EDT operation continues running in the background1735. Agent receives a response like:174```175USER SIGNAL: Your message here176177Signal Type: CANCEL178Tool: update_database179Elapsed: 20s180181Note: The EDT operation may still be running in background.182```183184**Use cases:**185- Long-running operations (full database update, project validation) blocking the agent186- Need to give the agent additional instructions187- EDT showed an error dialog and you want agent to retry188- Want to switch agent's focus to a different task189190</details>191192## Tool Management193194Control which MCP tools are exposed to AI assistants. This lets you reduce context window usage and restrict AI to read-only operations when needed.195196### Tool Groups197198All 67 tools are organized into 9 semantic groups:199200| Group | Description | Tools |201|-------|-------------|-------|202| **Core / Project** | EDT version, server self-diagnosis, on-demand tool guides, project listing, configuration, validation, XML export/import, project removal, project creation (configuration / extension / externalObjects) | `get_edt_version`, `get_server_status`, `get_tool_guide`, `list_projects`, `get_configuration_properties`, `clean_project`, `revalidate_objects`, `get_check_description`, `export_configuration_to_xml`, `import_configuration_from_xml`, `delete_project`, `create_project` |203| **Errors & Problems** | Error reporting and workspace markers (bookmarks, tasks) | `get_problem_summary`, `get_project_errors`, `get_markers` |204| **Code Intelligence** | Content assist, documentation, metadata browsing | `get_content_assist`, `get_platform_documentation`, `get_metadata_objects`, `get_metadata_details`, `list_subsystems`, `get_subsystem_content`, `find_references` |205| **Tags** | Tag management | `get_tags`, `get_objects_by_tags` |206| **Applications & Testing** | App management, infobase create/delete, database updates, launch, termination, testing | `get_applications`, `create_infobase`, `delete_infobase`, `list_configurations`, `update_database`, `debug_launch`, `terminate_launch`, `run_yaxunit_tests` |207| **Debugging** | Breakpoints, stepping, variable inspection and modification | `set_breakpoint`, `remove_breakpoint`, `list_breakpoints`, `wait_for_break`, `get_variables`, `set_variable`, `step`, `resume`, `evaluate_expression`, `debug_yaxunit_tests`, `debug_status`, `start_profiling`, `stop_profiling`, `get_profiling_results` |208| **BSL Code** | Module browsing, code reading/writing, search, form layout inspection | `read_module_source`, `write_module_source`, `get_module_structure`, `list_modules`, `search_in_code`, `read_method_source`, `get_method_call_hierarchy`, `go_to_definition`, `get_symbol_info`, `get_form_layout_snapshot`, `get_form_screenshot`, `get_template_screenshot`, `validate_query` |209| **Refactoring** | Metadata create (objects, members and form members), rename, delete, set properties, adopt into an extension | `create_metadata`, `rename_metadata_object`, `delete_metadata`, `modify_metadata`, `adopt_metadata_object` |210| **Translation (LanguageTool)** | Translation strings generation, configuration synchronization, project info | `generate_translation_strings`, `translate_configuration`, `get_translation_project_info` |211212Enable or disable entire groups or individual tools from the **Tools** tab in **Window → Preferences → MCP Server**. Disabled tools are filtered out of `tools/list` responses. If a client calls a disabled tool directly through `tools/call`, the server returns a message explaining that the tool is disabled.213214### Presets215216Quickly switch between common tool configurations using presets:217218| Preset | Description |219|--------|-------------|220| **All Tools** | All 67 tools enabled (default) |221| **Analysis Only** | Read-only analysis — Core, Errors, Code Intelligence, Tags |222| **Code Review** | Analysis + BSL code reading (excludes `write_module_source`) |223| **Development** | Full development without debugging tools |224225Select a preset from the dropdown in the Tools tab. The preset auto-detects based on the current enabled/disabled state and shows "Custom" when the configuration doesn't match any built-in preset.226227### Per-Tool Parameter Defaults228229Some tools have configurable default values for parameters like result limits. These defaults are used when the AI client doesn't specify the parameter explicitly:230231| Tool | Parameter | Default | Range |232|------|-----------|---------|-------|233| `get_project_errors` | Result limit | 100 | 1–1000 |234| `get_markers` | Result limit | 100 | 1–1000 |235| `get_metadata_objects` | Result limit | 100 | 1–1000 |236| `get_content_assist` | Result limit | 100 | 1–1000 |237| `search_in_code` | Max results | 100 | 1–500 |238| `search_in_code` | Context lines | 2 | 0–5 |239| `read_module_source` | Max lines | 500 | 100–50000 |240| `terminate_launch` | Termination timeout (sec) | 10 | 1–120 |241242Configure these in the Tools tab by selecting a tool that has configurable parameters — the parameter editors appear in the details panel below the tool tree.243244### Progressive Tool Disclosure (dynamic toolsets)245246For clients that work better with a small initial tool surface, the server can expose247only a **core** toolset up front and reveal the rest on demand — shrinking the248always-loaded `tools/list`. This is **off by default** (the full list is exposed,249unchanged); turn it on with the **Progressive disclosure** preference (or the250`EDT_MCP_PROGRESSIVE_DISCLOSURE=true` environment variable for headless/CI runs).251252When on, only the `core` toolset (navigation, source read, metadata discovery, and the253two management tools) appears in `tools/list`. To use more tools:2542551. Call **`list_toolsets`** to see the groups (`core`, `metadata`, `code`, `debug`,256 `testing`, `profiling`, `forms`, `tags`, `translation`, `project`) and their tools.2572. Call **`enable_toolset`** with `toolsets=[ids]` (e.g. `["code","debug"]`).2583. **Re-request `tools/list`** — the revealed tools now appear.259260This server does not push `notifications/tools/list_changed`, so the client must261re-list after enabling (the `enable_toolset` response says so). A hidden tool is only262hidden from `tools/list`; it remains callable by name. These progressive-disclosure263toolsets are distinct from the **Tool Groups** above (which the Tools tab uses to264enable/disable tools persistently).265266## Connecting AI Assistants267268### VS Code / GitHub Copilot269270Create `.vscode/mcp.json`:271```json272{273 "servers": {274 "EDT MCP Server": {275 "type": "sse",276 "url": "http://localhost:8765/mcp"277 }278 }279}280```281282<details>283<summary><strong>Other AI Assistants</strong> - Cursor, Claude Code, Claude Desktop</summary>284285### Cursor IDE286287> **Note:** Cursor doesn't support MCP embedded resources. Enable **"Plain text mode (Cursor compatibility)"** in EDT preferences: **Window → Preferences → MCP Server**.288289Create `.cursor/mcp.json`:290```json291{292 "mcpServers": {293 "EDT MCP Server": {294 "url": "http://localhost:8765/mcp"295 }296 }297}298```299300### Claude Code301302> **Note:** By editing the file `.claude.json` can be added to the MCP either to a specific project or to any project (at the root). If there is no mcpServers section, add it.303304Add to `.claude.json` (in Windows `%USERPROFILE%\.claude.json`):305```json306"mcpServers": {307 "EDT MCP Server": {308 "type": "http",309 "url": "http://localhost:8765/mcp"310 }311}312```313314### Claude Desktop315316`claude_desktop_config.json` accepts only stdio servers (a `command`), not a direct `url`, so bridge the HTTP endpoint with [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) (requires [Node.js](https://nodejs.org/)):317```json318{319 "mcpServers": {320 "EDT MCP Server": {321 "command": "npx",322 "args": ["-y", "mcp-remote", "http://localhost:8765/mcp"]323 }324 }325}326```327> The **Settings → Connectors** ("custom connector") route needs an HTTPS server reachable from Anthropic's cloud, so a plain-HTTP `localhost` endpoint must go through the `mcp-remote` stdio bridge above. You *could* expose it over an HTTPS tunnel (ngrok / Cloudflare Tunnel) to use a connector — but this server can write code into your configuration and start a debugger, so putting it on the public internet is a serious security risk and is not recommended.328329### Cline - extension for VSCode.330331```json332{333 "mcpServers": {334 "EDTMCPServer": {335 "type": "streamableHttp",336 "url": "http://localhost:8765/mcp"337 }338 }339}340```341342### Antigravity343344```json345{346 "mcpServers": {347 "EDTMCPServer": {348 "serverUrl": "http://localhost:8765/mcp"349 }350 }351}352```353354</details>355356## Multi-EDT Proxy357358Running more than one EDT instance at once? [`edt-mcp-proxy`](proxy/) is a standalone router that exposes a single, stable MCP endpoint on `:8764` and forwards each call to the right EDT-MCP instance by `projectName`, discovering live instances in the background. It ships as `edt-mcp-proxy-<version>.jar` alongside the plugin archive in every [release](https://github.com/DitriXNew/EDT-MCP/releases). See [proxy/README.md](proxy/README.md) for setup, CLI options and configuration.359360## Available Tools361362The full per-tool reference lives in **[docs/tools/](docs/tools/)** — one page per363tool (what it does, every parameter, and how it works), generated from the live MCP364server (`get_tool_guide`) so it never drifts from the code. Index below; re-generate365with `python docs/generate_tool_docs.py`.366367<!-- TOOLS-INDEX:START -->368<!-- generated by docs/generate_tool_docs.py — do not edit by hand -->369370**85 tools**, grouped by toolset. Full per-tool pages under [docs/tools/](docs/tools/).371372### Core373374> Always-on essentials: project/module navigation, source read, metadata discovery, and the toolset-management tools (list_toolsets / enable_toolset).375376| Tool | Description |377|------|-------------|378| [`enable_toolset`](docs/tools/enable_toolset.md) | Reveal (or hide) tool groups for progressive disclosure. Pass toolsets=[ids] from list_toolsets to reveal them, then RE-REQUEST tools/list to see the newly r… |379| [`get_edt_version`](docs/tools/get_edt_version.md) | Returns the running 1C:EDT version as a plain version string. Returns "Unknown" when the version cannot be determined. |380| [`get_metadata_details`](docs/tools/get_metadata_details.md) | Get detailed properties of one or more 1C metadata objects (basic info by default, or every reflected section with 'full: true'). Use it after get_metadata_o… |381| [`get_metadata_objects`](docs/tools/get_metadata_objects.md) | Get a flat list of 1C configuration metadata objects (Name, Synonym, Comment, Type, ObjectModule, ManagerModule) as a Markdown table. Use it to discover what… |382| [`get_module_structure`](docs/tools/get_module_structure.md) | Get structure of a BSL module: all procedures/functions with signatures, line numbers, regions, execution context (&AtServer, &AtClient), export flag, and pa… |383| [`get_server_status`](docs/tools/get_server_status.md) | Self-diagnosis snapshot of the running MCP server: listening port, MCP protocol version, plugin version, EDT version, enabled/total tool counts, the plainTex… |384| [`get_tool_guide`](docs/tools/get_tool_guide.md) | Get the full on-demand how-to for a tool: its description, every parameter (type, required, allowed values) and extended examples/preconditions kept OUT of t… |385| [`list_modules`](docs/tools/list_modules.md) | List BSL modules in an EDT project as a table (module path, module type, parent type, parent name). Use it to discover module paths before reading or editing… |386| [`list_projects`](docs/tools/list_projects.md) | List all workspace projects with properties (name, path, type, natures). format='md' (default) returns the human Markdown table; format='json' returns the ma… |387| [`list_toolsets`](docs/tools/list_toolsets.md) | List the tool groups (toolsets) used by progressive tool disclosure: each toolset's id, title, description, member tools, and whether it is currently visible… |388| [`read_module_source`](docs/tools/read_module_source.md) | Read BSL module source code from an EDT project, whole file or a line range. Returns YAML frontmatter (including a contentHash revision token to round-trip i… |389| [`search_in_code`](docs/tools/search_in_code.md) | Literal/regex full-text search across all BSL modules in a project. Matching is purely textual and NOT ru/en dialect-aware, so a query in one BSL language wo… |390391### Metadata392393> Metadata objects: discovery, create/modify/delete/rename/adopt, subsystems, configuration.394395| Tool | Description |396|------|-------------|397| [`adopt_metadata_object`](docs/tools/adopt_metadata_object.md) | Adopt a base-configuration metadata object or member (object / form / attribute / tabular section / ...) into a configuration EXTENSION so the extension can… |398| [`create_launch_config`](docs/tools/create_launch_config.md) | Create a 1C:EDT runtime-client launch configuration (thin/thick/web). The SAME config works for both run and debug (mode is chosen at launch time by debug_la… |399| [`create_metadata`](docs/tools/create_metadata.md) | Create a metadata node addressed by a 1C full-name FQN: a top-level object (Catalog.Products) or a subordinate member (Catalog.Products.Attribute.Weight, Inf… |400| [`delete_launch_config`](docs/tools/delete_launch_config.md) | Delete a 1C:EDT launch configuration by name (runtime client or Attach). Destructive: guarded by a confirm-preview - call without confirm to preview (no chan… |401| [`delete_metadata`](docs/tools/delete_metadata.md) | Delete a metadata node (object or member, including a FORM object 'Type.Object.Form.Name', a FORM member - item / attribute / command / handler - an XDTO pac… |402| [`export_common_picture`](docs/tools/export_common_picture.md) | Export a 1C CommonPicture (общая картинка) as PNG and list its picture variants (dpi, theme, interface variant, direction, template flag, glyph size). Resolv… |403| [`get_configuration_properties`](docs/tools/get_configuration_properties.md) | Get 1C:Enterprise configuration properties (name, synonym, comment, script variant, compatibility mode, etc.) |404| [`get_subsystem_content`](docs/tools/get_subsystem_content.md) | Get one 1C subsystem's content: properties, its metadata objects (Type/Name/Synonym/FQN) and child subsystems, identified by FQN (e.g. 'Subsystem.Sales.Subsy… |405| [`list_common_pictures`](docs/tools/list_common_pictures.md) | List a 1C configuration's CommonPicture objects and the variants each carries in its Picture.zip (DPI, theme, interface variant, template flag, glyph size, p… |406| [`list_configurations`](docs/tools/list_configurations.md) | List EDT launch configurations (runtime client + Attach + other 1C types) with their running state. This is the discovery step before debug_launch / run_yaxu… |407| [`list_subsystems`](docs/tools/list_subsystems.md) | List 1C subsystems of a configuration as a flat table (FQN, Synonym, Comment, InCommandInterface, content count, children count). Walks the whole tree by def… |408| [`modify_metadata`](docs/tools/modify_metadata.md) | Set properties of a metadata node (object or member, including a FORM member - item / attribute / command) addressed by a 1C full-name FQN, as properties=[{n… |409| [`rename_metadata_object`](docs/tools/rename_metadata_object.md) | Rename a metadata object or attribute, cascading the change across all references in BSL code, forms, and other metadata. Use the two-phase workflow: call wi… |410411### Code412413> BSL code: write/read methods, call hierarchy, go-to-definition, references, content assist, queries.414415| Tool | Description |416|------|-------------|417| [`find_references`](docs/tools/find_references.md) | Find every place a metadata object is used: BSL code modules (with line numbers), other metadata, forms, roles, subsystems, etc. Pass the object FQN; the typ… |418| [`get_content_assist`](docs/tools/get_content_assist.md) | Get code-completion proposals at a 1-based line/column in a BSL module - the members, globals and variables valid at that caret (e.g. after a '.'). May retur… |419| [`get_method_call_hierarchy`](docs/tools/get_method_call_hierarchy.md) | Find a BSL method's call hierarchy: who calls it (callers, default) or what it calls (callees), via semantic AST analysis that resolves ru/en spellings (unli… |420| [`get_outgoing_structures`](docs/tools/get_outgoing_structures.md) | For each outgoing qualified call in a BSL module (or one method), report the top-level literal keys of the Structure passed as its first argument (local .Ins… |421| [`get_symbol_info`](docs/tools/get_symbol_info.md) | Get type/hover info about a symbol at a position in a BSL module. Returns inferred types, signatures, and documentation. |422| [`go_to_definition`](docs/tools/go_to_definition.md) | Go to the definition of a symbol (the inverse of find_references): a qualified method 'ModuleName.MethodName', a bare 'MethodName' (also pass modulePath), or… |423| [`read_method_source`](docs/tools/read_method_source.md) | Read a specific procedure/function from a BSL module by name. Returns source code with metadata. Lists available methods if not found. Use this for one metho… |424| [`validate_query`](docs/tools/validate_query.md) | Validate 1C:Enterprise query language (QL) text against a project, returning syntax and semantic errors with line numbers. Use to check a query before embedd… |425| [`write_module_source`](docs/tools/write_module_source.md) | Write BSL source code to a 1C metadata object module. Use to edit a module: searchReplace a fragment (default, needs oldSource), replace the whole file, or a… |426427### Debug428429> Runtime debugging: launch/attach, breakpoints, step/resume, variables, expression evaluation.430431| Tool | Description |432|------|-------------|433| [`debug_launch`](docs/tools/debug_launch.md) | Start an EDT debug session: either an existing config by launchConfigurationName (runtime client OR Attach, the latter needed to debug server-side code), or… |434| [`debug_status`](docs/tools/debug_status.md) | Report active debug sessions: applicationId (real or synthetic 'attach:<name>' / 'launch:<name>'), launch configuration name/type, mode (debug/run), whether… |435| [`evaluate_expression`](docs/tools/evaluate_expression.md) | Evaluate a BSL expression in the context of a suspended stack frame. Pass frameRef from wait_for_break and the expression text. WARNING: this executes arbitr… |436| [`get_applications`](docs/tools/get_applications.md) | Get list of applications (infobases) for a project. Returns application ID, name, type, and update state. Application ID is required for update_database and… |437| [`get_variables`](docs/tools/get_variables.md) | Read variables from a stack frame of a suspended debug thread. Pass frameRef from wait_for_break (preferred) or threadId+frameIndex. Use expandPath to drill… |438| [`list_breakpoints`](docs/tools/list_breakpoints.md) | List active line breakpoints. Optionally filter by projectName. |439| [`remove_breakpoint`](docs/tools/remove_breakpoint.md) | Remove a 1C BSL line breakpoint. Either pass breakpointId (returned from set_breakpoint) or projectName+module+lineNumber to look it up by coordinates. |440| [`resume`](docs/tools/resume.md) | Resume a suspended debug thread or all threads of a debug target. Pass threadId (from wait_for_break) or applicationId. applicationId accepts ANY id form for… |441| [`set_breakpoint`](docs/tools/set_breakpoint.md) | Set a line breakpoint on a 1C BSL module. Accepts either an EDT module-relative path (e.g. 'CommonModules/Foo/Module.bsl') or an absolute filesystem path. Us… |442| [`set_variable`](docs/tools/set_variable.md) | Set a BSL variable's value in a suspended debug frame. WRITE/side-effect: EXECUTES the entered value as a BSL literal/expression live in the running 1C appli… |443| [`step`](docs/tools/step.md) | Step a suspended debug thread. kind ∈ {over, into, out}. Blocks until the next SUSPEND event (or timeout) and returns the new frame snapshot. |444| [`terminate_launch`](docs/tools/terminate_launch.md) | Terminate one or more 1C launches started from THIS EDT instance; externally launched 1C clients are never touched. Select ONE target mode: launchConfigurati… |445| [`wait_for_break`](docs/tools/wait_for_break.md) | Wait for a debug suspend event (e.g. breakpoint hit) on the given application. Returns the suspended thread/frame snapshot, or {hit:false} on timeout. applic… |446447### Testing448449> YAXUnit unit testing: run and debug test suites.450451| Tool | Description |452|------|-------------|453| [`debug_yaxunit_tests`](docs/tools/debug_yaxunit_tests.md) | Deprecated alias for run_yaxunit_tests with debug=true. Launches YAXUnit tests in DEBUG mode so breakpoints fire, then call wait_for_break to inspect. Prefer… |454| [`run_yaxunit_tests`](docs/tools/run_yaxunit_tests.md) | Run YAXUnit tests for a 1C:Enterprise project and return a JUnit Markdown report. Polls for up to `timeout` seconds, then returns the report or **Pending** (… |455456### Profiling457458> Performance profiling: start/stop a measurement and read the results.459460| Tool | Description |461|------|-------------|462| [`get_profiling_results`](docs/tools/get_profiling_results.md) | Get profiling (performance measurement) results after a debug session: per-module, per-line call count, timing and percentage. Returns only the MOST RECENT m… |463| [`start_profiling`](docs/tools/start_profiling.md) | Start performance measurement on the active debug target. Enables line-level profiling: call counts and timing for every executed BSL line. Start-only and id… |464| [`stop_profiling`](docs/tools/stop_profiling.md) | Stop performance measurement on the active debug target. Counterpart to start_profiling: deterministically switches profiling off. Idempotent: if profiling i… |465466### Forms467468> Form and template rendering: form layout snapshot, form screenshot, template screenshot.469470| Tool | Description |471|------|-------------|472| [`get_form_layout_snapshot`](docs/tools/get_form_layout_snapshot.md) | Return a YAML snapshot of a form's calculated WYSIWYG layout (bounds, element types, display properties) as text; use it to inspect or compare what a form ac… |473| [`get_form_screenshot`](docs/tools/get_form_screenshot.md) | Capture a PNG screenshot of a form's WYSIWYG editor; pass formPath to open the form automatically or omit it to shoot the active editor. Requires EDT launche… |474| [`get_template_screenshot`](docs/tools/get_template_screenshot.md) | Capture a PNG screenshot of a 1C template (a SpreadsheetDocument print form) as EDT renders it, so its layout and text are visible to an AI. Works for a comm… |475476### Tags477478> Tag-based organization: list tags and find objects by tag.479480| Tool | Description |481|------|-------------|482| [`get_objects_by_tags`](docs/tools/get_objects_by_tags.md) | Get metadata objects filtered by tags. Returns objects that have any of the specified tags, including tag descriptions and object FQNs. |483| [`get_tags`](docs/tools/get_tags.md) | Get list of all tags defined in the project. Tags are user-defined labels for organizing metadata objects. Returns tag name, color, description, and number o… |484485### Translation486487> Configuration translation via LanguageTool: extract, translate, project info.488489| Tool | Description |490|------|-------------|491| [`generate_translation_strings`](docs/tools/generate_translation_strings.md) | Generate translation strings (.lstr/.trans/.dict) for a configuration project: scans translatable features and writes the resulting keys into the project's s… |492| [`get_translation_project_info`](docs/tools/get_translation_project_info.md) | Return LanguageTool metadata for a project: the translation storages declared on it and the available translation provider IDs. Use it to check whether a dic… |493| [`translate_configuration`](docs/tools/translate_configuration.md) | Run EDT 'Translate configuration' on a configuration project - reads the dictionaries from the storages bound to it (external dictionary storage projects wit… |494495### Project496497> Project operations: clean/revalidate, update DB, export/import XML, problems and markers, docs.498499| Tool | Description |500|------|-------------|501| [`build_external_objects`](docs/tools/build_external_objects.md) | Build (compile to disk) the external data processors/reports of an EDT external-object project to .epf/.erf files. Build ONE object with objectName, or ALL o… |502| [`clean_project`](docs/tools/clean_project.md) | Clean EDT project and trigger full revalidation. Direction: DISK -> MODEL - re-imports the on-disk src/ .mdo files into the in-memory model. Refreshes files… |503| [`create_git_branch`](docs/tools/create_git_branch.md) | Create a new local git branch, optionally check it out, and optionally attach an EXISTING infobase (application, from get_applications) to the new branch's c… |504| [`create_infobase`](docs/tools/create_infobase.md) | Create a new FILE infobase (1C database) OR register an existing one, and bind it to a configuration project so it appears in get_applications. mode='create'… |505| [`create_project`](docs/tools/create_project.md) | Create a NEW 1C project in the EDT workspace. projectKind selects the kind: 'configuration' (standalone), 'extension' (bound to a base configuration), or 'ex… |506| [`delete_infobase`](docs/tools/delete_infobase.md) | Remove a FILE infobase association from a configuration project OR delete a standalone (autonomous) server application. Destructive: guarded by a confirm-pre… |507| [`delete_project`](docs/tools/delete_project.md) | Remove an EDT project from the workspace, optionally deleting its files from disk (deleteContent). Destructive: guarded by a confirm-preview - call without c… |508| [`export_configuration_to_xml`](docs/tools/export_configuration_to_xml.md) | Export an EDT configuration project to XML files (EDT menu: Export -> Configuration to XML Files). Equivalent of 1C platform DumpConfigToFiles. |509| [`get_check_description`](docs/tools/get_check_description.md) | Get detailed description of an EDT check by its ID. Returns markdown content with check explanation, examples, and how to fix. Accepts the symbolic check id… |510| [`get_event_log`](docs/tools/get_event_log.md) | Read a 1C infobase event log WITHOUT a running 1C session by parsing the raw log files (legacy text ver 2.0: a 1Cv8.lgf dictionary + dated *.lgp partitions).… |511| [`get_markers`](docs/tools/get_markers.md) | List workspace markers: bookmarks and/or task markers (TODO, FIXME, XXX, HACK). Filter by markerKind (bookmark \| task; omit to list both), projectName, fileP… |512| [`get_mcp_history`](docs/tools/get_mcp_history.md) | Return the recorded MCP call history (this server's in-memory ring of request/response exchanges) so you can introspect your OWN traffic: which tools you cal… |513| [`get_platform_documentation`](docs/tools/get_platform_documentation.md) | Look up 1C:Enterprise platform documentation for built-in types (ValueTable, Array, Structure) and global built-in functions, including their methods, proper… |514| [`get_problem_summary`](docs/tools/get_problem_summary.md) | Get problem summary with counts grouped by project and EDT severity level (ERRORS, BLOCKER, CRITICAL, MAJOR, MINOR, TRIVIAL). Use this for severity totals on… |515| [`get_project_errors`](docs/tools/get_project_errors.md) | List EDT configuration problems (validation markers) with optional project / severity / check-id / object filters. Each row carries the check code, message,… |516| [`import_configuration_from_xml`](docs/tools/import_configuration_from_xml.md) | Import a configuration from a directory of XML files into a NEW EDT project (EDT menu: Import); the reverse of export_configuration_to_xml. The projectName m… |517| [`list_git_branches`](docs/tools/list_git_branches.md) | List a project's git branches: local and remote-tracking, with the CURRENT branch marked (detached HEAD flagged), plus the 1C application/infobase each branc… |518| [`resync_to_disk`](docs/tools/resync_to_disk.md) | Bulk re-synchronize the in-memory BM model to the on-disk src/ .mdo files and report BM-to-disk desync. Direction: MODEL -> DISK (writes the model out to src… |519| [`revalidate_objects`](docs/tools/revalidate_objects.md) | Revalidate EDT project or specific objects. If objects array is empty or missing, revalidates entire project. FQN examples: 'Document.SalesOrder', 'Catalog.P… |520| [`set_branch_infobase`](docs/tools/set_branch_infobase.md) | Attach or detach an EXISTING infobase (application) to/from a specific git branch context, so switch_git_branch's automatic binding follows that branch. Targ… |521| [`set_infobase_credentials`](docs/tools/set_infobase_credentials.md) | Store infobase connection credentials (user/password) so update_database and debug_launch can authenticate the update agent on an infobase that has a user li… |522| [`switch_git_branch`](docs/tools/switch_git_branch.md) | Switch a project's git repository to another branch (headless EGit checkout). branch may be a short local name (e.g. 'feature/x') or a full ref ('refs/heads/… |523| [`update_database`](docs/tools/update_database.md) | Apply configuration changes to an application's database (infobase), full or incremental. Target by launchConfigurationName (preferred) or projectName + appl… |524| [`validate_xdto_package`](docs/tools/validate_xdto_package.md) | Validate a single XDTO package by running EDT's OWN configuration validation (the same check engine behind get_project_errors) scoped to that package, and re… |525526### Git527528> Run raw git commands (status/diff/commit/push/pull/...) in a project's repository via the 'git' tool. Powerful (it can push, checkout, stash); DISABLED by default - check it in the MCP Server Tools preference tab to enable.529530| Tool | Description |531|------|-------------|532| [`git`](docs/tools/git.md) | Run a git command in a project's repository - the non-UI equivalent of typing it in a terminal. Send it as a shell-style string (e.g. 'status', 'diff HEAD~1'… *(not enabled by default)* |533534<!-- TOOLS-INDEX:END -->535536## XDTO Packages5375381C XDTO packages (`XDTOPackage`) can be authored end-to-end through MCP, down to their539package-local structure, without hand-editing XML:540541- **`create_metadata`** / **`modify_metadata`** / **`delete_metadata`** address XDTO542 package members by FQN, layered on top of the existing top-level `XDTOPackage.<Name>`543 create/delete:544 - `XDTOPackage.<Package>.ObjectType.<Type>` — an ObjectType in the package (optional545 flags: `open`, `abstract`, `mixed`, `ordered`, `sequenced`).546 - `XDTOPackage.<Package>.Property.<Name>` — a package-global Property.547 - `XDTOPackage.<Package>.ObjectType.<Type>.Property.<Name>` — a Property nested in an548 ObjectType.549550 A Property's `type` accepts a built-in XSD type name (e.g. `string`), the exact name551 of another ObjectType already in the same package (a same-package reference), or an552 explicit `{nsUri, name}` pair; optional `lowerBound`/`upperBound`, `nillable`,553 `fixed`+`default` round out the vocabulary. See `get_tool_guide('create_metadata')`554 for the full parameter list.555- **`validate_xdto_package`** runs EDT's own configuration validation scoped to one556 package and returns a pass/fail verdict plus any problems found (e.g. a Property left557 referencing an ObjectType that was since deleted) — a thin, read-only wrapper over558 `get_project_errors`, handy right after authoring or editing package members.559560## Output Formats561562Each tool declares a response type (`IMcpTool.getResponseType()`). **The default — and the most common type — is Markdown**: any tool that does not override `getResponseType()` returns Markdown as an EmbeddedResource with `mimeType: text/markdown`. The non-default types are enumerated exhaustively below; everything not listed here is Markdown.563564#### Response format policy (Markdown vs JSON)565566`structuredContent`/JSON exists for clients to consume, not for the agent to read: it is justified only by verbatim round-trip of identifiers, machine-structured positions, a declared `outputSchema`, or UI-rendered data. **Markdown is the default** because it is more token-efficient and directly readable.567568A tool returns **JSON** only when its result carries at least one of:569570- **(a) round-trip IDs** another tool consumes (e.g. a created object's FQN, a launch/application ID, a breakpoint ID);571- **(b) machine-structured positions** (e.g. an error line/column);572- **(c) a declared `outputSchema`**;573- **(d) UI-rendered data**.574575An action/confirmation/status result with **none** of these returns **Markdown**. `write_module_source` is the reference Markdown action tool; `revalidate_objects`, `export_configuration_to_xml`, and `import_configuration_from_xml` follow it (status + paths/counts, no round-trip data).576577Which tool families stay JSON, and why:578579- **metadata-writes** (`create_metadata`, `modify_metadata`, `delete_metadata`, via `AbstractMetadataWriteTool`) — return the edited object's round-trip **FQN** *(a)*;580- **debug / profiling tools** — return launch / application / breakpoint IDs and live session state consumed by follow-up calls *(a)*;581- **`validate_query`** — returns the error **line/column** *(b)*;582- **`list_configurations`** — returns config **identities** consumed by other tools *(a)*;583- **`clean_project`** / **`update_database`** — return a destructive status whose JSON shape is asserted by e2e *(d-like contract)*.584585Errors are reported the same way regardless of a tool's normal format — see the **Error contract** below.586587- **Markdown tools** (the default): every tool that is not listed under another type below, returned as an EmbeddedResource with `mimeType: text/markdown`. This includes all read/list/search/navigation tools that emit human-readable reports — for example `list_projects` (which switches to JSON when called with `format='json'`), `list_modules`, `list_subsystems`, `list_configurations`*, `get_project_errors`, `validate_xdto_package`, `get_markers`, `get_problem_summary`, `get_check_description`, `get_metadata_objects`, `get_metadata_details`, `get_module_structure`, `get_subsystem_content`, `get_symbol_info`, `get_method_call_hierarchy`, `get_objects_by_tags`, `get_tags`, `get_platform_documentation`, `find_references`, `go_to_definition`, `search_in_code`, `read_module_source`, `read_method_source`, `write_module_source`, `rename_metadata_object`, `run_yaxunit_tests`, `terminate_launch`, `revalidate_objects`, `export_configuration_to_xml`, `import_configuration_from_xml`, and all three LanguageTool tools (`generate_translation_strings`, `translate_configuration`, `get_translation_project_info`). (*`list_configurations` is the exception among the `list_*` tools — it returns JSON; see below.)588- **YAML tools**: `get_configuration_properties` — returns a human-readable YAML body as an EmbeddedResource (resource named `*.yaml`, `mimeType: text/yaml`).589- **JSON tools** (return JSON with `structuredContent`): `get_server_status`, `get_applications`, `create_infobase`, `delete_infobase`, `get_content_assist`, `get_variables`, `get_profiling_results`, `list_configurations`, `list_breakpoints`, `set_breakpoint`, `remove_breakpoint`, `step`, `resume`, `wait_for_break`, `debug_launch`, `debug_status`, `debug_yaxunit_tests`, `evaluate_expression`, `start_profiling`, `stop_profiling`, `validate_query`, `clean_project`, `update_database`, `delete_project`, `git`, plus the metadata-write tools that inherit JSON from `AbstractMetadataWriteTool` (`create_metadata`, `modify_metadata`, `delete_metadata`).590- **Text tools** (plain text): `get_edt_version`, `get_form_layout_snapshot`.591- **Image tools**: `get_form_screenshot` — returns the rendered form as an EmbeddedResource with an `image/*` `mimeType`.592593#### Error contract594595Whatever a tool's normal output format above, it reports a **failure** the same way: a JSON payload `{"success": false, "error": "<message>"}` that the server delivers as a structured tool error (`isError: true`) regardless of the declared response type. The `error` field is always present (a `null` exception message is coalesced to `Unknown error`) and the message carries no redundant `Error:` prefix. A client detects failure via `isError` / `success: false` and reads `error` for the reason — no markdown parsing required. Success and purely *informational* results (for example "No references found", or a not-found accompanied by a list of valid alternatives) stay in the tool's natural format.596597#### Tool annotations598599Every tool in the `tools/list` response carries an `annotations` object with the standard MCP behavioral hints, so a client can reason about a tool's effect before calling it. The hints are derived centrally from the tool name (a tool may override them):600601| Hint | Meaning | When set |602|------|---------|----------|603| `readOnlyHint` | The tool does not modify the workspace | `true` for `get_*` / `list_*` / `read_*` / `search_*` / `find_*` / `validate_*`; `false` for write and destructive tools |604| `idempotentHint` | Repeating the call has no additional effect | `true` for the read-only tools above |605| `destructiveHint` | The tool may perform a destructive or irreversible update | `true` for `delete_metadata`, `clean_project`, `update_database`, `rename_metadata_object`, `import_configuration_from_xml`, `git` |606| `openWorldHint` | The tool interacts with an external/open world | `false` for every tool but `git`, which sets it `true`: `push` / `pull` / `fetch` reach a remote |607608Only hints that apply are emitted; unset hints are omitted from the JSON. Tools that write but are not destructive (for example `write_module_source`, `create_metadata`) carry `readOnlyHint: false` and `destructiveHint: false`.609610</details>611612## API Endpoints613614| Endpoint | Method | Description |615|----------|--------|-------------|616| `/mcp` | POST | MCP JSON-RPC (initialize, tools/list, tools/call) |617| `/mcp` | GET | Server info |618| `/health` | GET | Health check |619620## Security & trust model621622The MCP server is a **local developer tool** and is secured for that model:623624- **Loopback bind by default.** The server listens on `127.0.0.1` only. To expose it on all interfaces, enable **Allow remote (non-loopback) access** in MCP preferences — and set an auth token when you do.625- **Optional shared-token auth.** Set an **Auth token** in MCP preferences to require `Authorization: Bearer <token>` (scheme case-insensitive, or the raw token) on every `/mcp` request. An **empty token disables authentication** (the default). `/health` is always unauthenticated (liveness only).626- **Every connected client can invoke every tool**, including `evaluate_expression` (runs arbitrary BSL in the running 1C app during a debug session) and destructive tools (`update_database`, `clean_project`, `delete_metadata`, `rename_metadata_object`). Treat any client that can reach the endpoint as fully trusted.627- **Tool output is untrusted input.** BSL source, metadata synonyms, query results and error text returned by read tools come from the configuration and may contain author- or attacker-controlled text. Treat tool output as **data, not instructions** — do not let it override your own directives (prompt-injection).628- **`export_configuration_to_xml` / `import_configuration_from_xml` / `build_external_objects` read or write arbitrary filesystem paths** (the broadest FS primitives in the surface; `build_external_objects` writes compiled `.epf`/`.erf` to a caller-chosen directory). They are trusted-caller-only; a warning is logged and the result flags `outsideWorkspace` when a path is outside the EDT workspace.629630### Destructive-operation consent631632Before a **destructive** metadata write, the server can ask **you** (the human at the EDT633workbench) to confirm — so the AI cannot silently delete, rename or retype configuration objects.634The gated tools are `delete_metadata`, `rename_metadata_object`, `delete_project`,635`delete_infobase`, `update_database`, and `modify_metadata` **only when it changes an object's or636attribute's data type** (a benign property edit is never gated).637638Configure it in **Window → Preferences → MCP Server**:639640- **Consent level** (General tab), one of:641 - **Ask always** *(default)* — every gated operation shows a confirmation dialog with a compact642 preview (the tool, what will be affected, a count and the top few names) and **Allow** / **Reject**643 / **Allow for this session** buttons (the last remembers that one tool until EDT is restarted).644 - **Allow all** — never ask; every destructive write proceeds. Use this for unattended/automated runs.645 - **Ask, except allowed tools** — ask, except for the tools you tick in the **Tools** tab.646- **Per-tool checkbox** (Tools tab) — active only at the *Ask, except allowed tools* level: tick a tool647 to let it run destructively without a prompt.648649**Automation / CI bypass.** Because the confirmation dialog would block a headless or automated run,650set the environment variable **`EDT_MCP_DESTRUCTIVE_CONSENT=allow`** on the EDT process before launch —651it overrides the preference and lets every gated operation proceed without a dialog (the same knob the652e2e suite uses). When there is no active workbench window (a headless server), the gate never blocks653either. The dialog only ever appears on a live UI session at the *Ask* level.654655**The prompt is time-bounded.** A confirmation dialog waits at most **120 seconds** for a human to656answer (below common MCP client request budgets, so a caller gets an actionable error instead of its657own transport timing out first). If nobody answers in time, the operation auto-rejects — nothing is658changed — with an error naming the tool, the 120 s budget, and the three ways to proceed: allow the659tool via Preferences (*Allow all* or per-tool), set `EDT_MCP_DESTRUCTIVE_CONSENT=allow` for unattended660runs, or re-run the call and answer the dialog promptly.661662### Infobase authentication dialog663664When a target infobase has a **user list**, connecting to it during `update_database` or `debug_launch`665can raise 1C's blocking **"Configure Infobase access Settings"** login dialog. To keep unattended MCP666calls from hanging on it, the server **auto-cancels that dialog while a tool is running** — the667MCP-triggered connect fails fast with a hint to `set_infobase_credentials` instead of blocking forever668(issue #194). Store the credentials once with `set_infobase_credentials` and the connect no longer669needs the dialog.670671The auto-cancel is **activity-scoped**: it fires only while an MCP tool is in flight (plus a short grace672window for the asynchronous read-back that follows a tool). So when the **MCP server is idle**, you can673open EDT's **"Configure Infobase access"** dialog **by hand in the GUI** and use it normally — the674credentials you enter are stored into EDT's encrypted **Secure Storage** (the leak-free path), exactly675as the configurator does it. Only dialogs raised by MCP activity are cancelled; a human configuring676credentials between agent runs is never interrupted. (The Secure-Storage password-hint dialog stays677suppressed unconditionally — it is internal and never human-configured.)678679**Automation / CI bypass.** The auto-cancel is **on by default**. To turn it **off** — e.g. to debug the680login flow interactively, or on a stand where you want the prompt to appear even during MCP calls — set681the environment variable **`EDT_MCP_SUPPRESS_AUTH_DIALOG=false`** (also `0` / `no`) on the EDT process682before launch. Any other value — or leaving it unset — keeps auto-cancel enabled, so an unattended run683never regresses into a hang.684685## Metadata Tags686687Organize your metadata objects with custom tags for easier navigation and filtering.688689### Why Use Tags?690691Tags help you:692- Group related objects across different metadata types (e.g., all objects for a specific feature)693- Quickly find objects in large configurations694- Filter the Navigator to focus on specific areas of the project695- Share object organization with your team via version control696697### Getting Started698699**Assigning Tags to Objects:**7007011. Right-click on any metadata object in the Navigator7022. Select **Tags** from the context menu7033. Check the tags you want to assign, or select **Manage Tags...** to create new ones704705706707**Managing Tags:**708709In the Manage Tags dialog you can:710- Create new tags with custom names, colors, and descriptions711- Edit existing tags (name, color, description)712- Delete tags713- See all available tags for the project714715716717### Viewing Tags in Navigator718719Tagged objects show their tags as a suffix in the Navigator tree:720721722723**To enable/disable tag display:**724- **Window → Preferences → General → Appearance → Label Decorations**725- Toggle "Metadata Tags Decorator"726727### Filtering Navigator by Tags728729Filter the entire Navigator to show only objects with specific tags:7307311. Click the tag filter button in the Navigator toolbar (or right-click → **Tags → Filter by Tag...**)7322. Select one or more tags7333. Click **Set** to apply the filter734735736737The Navigator will show only:738- Objects that have ANY of the selected tags739- Parent folders containing matching objects740741**To clear the filter:** Click **Turn Off** in the dialog or use the toolbar button again.742743### Keyboard Shortcuts for Tags744745Quickly toggle tags on selected objects using keyboard shortcuts:746747| Shortcut | Action |748|----------|--------|749| **Ctrl+Alt+1** | Toggle 1st tag |750| **Ctrl+Alt+2** | Toggle 2nd tag |751| **...** | ... |752| **Ctrl+Alt+9** | Toggle 9th tag |753| **Ctrl+Alt+0** | Toggle 10th tag |754755**Features:**756- Works with multiple selected objects757- Supports cross-project selection (each object uses tags from its own project)758- Pressing the same shortcut again removes the tag (toggle behavior)759- Tag order is configurable in the Manage Tags dialog (Move Up/Move Down buttons)760761**To customize shortcuts:** Window → Preferences → General → Keys → search for "Toggle Tag"762763### Filtering Untagged Objects764765Find metadata objects that haven't been tagged yet:7667671. Open Filter by Tag dialog (toolbar button or Tags → Filter by Tag...)7682. Check the **"Show untagged objects only"** checkbox7693. Click **Set**770771The Navigator will show only objects that have no tags assigned, making it easy to identify objects that need categorization.772773### Multi-Select Tag Assignment774775Assign or remove tags from multiple objects at once:7767771. Select multiple objects in the Navigator (Ctrl+Click or Shift+Click)7782. Right-click → **Tags**7793. Select a tag to toggle it on/off for ALL selected objects780781**Behavior:**782- ✓ Checked = all selected objects have this tag783- ☐ Unchecked = none of the selected objects have this tag784- When objects are from different projects, only objects from projects that have the tag will be affected785786### Tag Filter View787788For advanced filtering across multiple projects, use the Tag Filter View:789790**Window → Show View → Other → MCP Server → Tag Filter**791792This view provides:793- **Left panel**: Select tags from all projects in your workspace794- **Right panel**: See all matching objects with search and navigation795- **Search**: Filter results by object name using regex796- **Double-click**: Navigate directly to the object797798### Where Tags Are Stored799800Tags are stored in `.settings/metadata-tags.yaml` file in each project. This file:801- Can be committed to version control (VCS friendly)802- Is automatically updated when you rename or delete objects803- Uses YAML format for easy readability804805**Example:**806```yaml807assignments:808 CommonModule.Utils:809 - Utils810 Document.SalesOrder:811 - Important812 - Sales813tags:814 - color: '#FF0000'815 description: Critical business logic816 name: Important817 - color: '#00FF00'818 description: ''819 name: Utils820 - color: '#0066FF'821 description: Sales department documents822 name: Sales823```824825## Metadata Groups826827Organize your Navigator tree with custom groups to create a logical folder structure for metadata objects.828829### Why Use Groups?830831Groups help you:832- Create custom folder hierarchy in the Navigator tree833- Organize objects by business area, feature, or any logical structure834- Navigate large configurations faster with nested groups835- Separate grouped objects from ungrouped ones836837### Getting Started838839**Creating a Group:**8408411. Right-click on any metadata folder (e.g., Catalogs, Common modules) in the Navigator8422. Select **New Group...** from the context menu8433. Enter the group name and optional description8444. Click **OK** to create the group845846847848**Create Group Dialog:**849850851852**Adding Objects to a Group:**8538541. Right-click on any metadata object in the Navigator8552. Select **Add to Group...**8563. Choose the target group from the list857858859860**Removing Objects from a Group:**8618621. Right-click on an object inside a group8632. Select **Remove from Group**864865### Viewing Groups in Navigator866867Grouped objects appear inside their group folders in the Navigator tree:868869870871872873**Key Features:**874- Groups are created per metadata collection (Catalogs, Common modules, Documents, etc.)875- Objects inside groups are still accessible via standard EDT navigation876- Ungrouped objects appear at the end of the list877- Use the **Hide Groups** toggle button in the Navigator toolbar to temporarily hide virtual group folders and show grouped objects in their original collections again878879### Group Operations880881| Action | How to Do It |882|--------|--------------|883| Create group | Right-click folder → **New Group...** |884| Add object to group | Right-click object → **Add to Group...** |885| Remove from group | Right-click object in group → **Remove from Group** |886| Copy group name | Select group → **Ctrl+C** |887| Delete group | Right-click group → **Delete** |888| Rename group | Right-click group → **Rename...** |889| Hide/show groups | Click **Hide Groups** in the Navigator toolbar |890891### Where Groups Are Stored892893Groups are stored in `.settings/groups.yaml` file in each project. This file:894- Can be committed to version control (VCS friendly)895- Uses YAML format for easy readability896- Is automatically updated when you rename or delete objects897898**Example:**899```yaml900groups:901- name: "Products & Inventory"902 description: "Product and inventory catalogs"903 path: Catalog904 order: 0905 children:906 - Catalog.ItemKeys907 - Catalog.Items908 - Catalog.ItemSegments909 - Catalog.Units910 - Catalog.UnitsOfMeasurement911- name: "Organization"912 description: "Organization structure catalogs"913 path: Catalog914 order: 1915 children:916 - Catalog.Companies917 - Catalog.Stores918- name: "Core Functions"919 description: "Core shared functions used across the application"920 path: CommonModule921 order: 0922 children:923 - CommonModule.CommonFunctionsClient924 - CommonModule.CommonFunctionsServer925 - CommonModule.CommonFunctionsClientServer926- name: "Localization"927 description: "Multi-language support modules"928 path: CommonModule929 order: 1930 children:931 - CommonModule.Localization932 - CommonModule.LocalizationClient933 - CommonModule.LocalizationServer934 - CommonModule.LocalizationReuse935```936937## Building from source938939The plugin is a Maven/Tycho project under [mcp/](mcp/). CI builds it via [.github/workflows/build.yml](.github/workflows/build.yml); the same flow can be run locally with [source/compile.sh](source/compile.sh).940941### Prerequisites942943- JDK 17 (e.g. Temurin / Oracle JDK)944- Apache Maven 3.9+ (no `mvnw` wrapper is committed — install Maven manually or via a package manager: `winget`, Homebrew, `apt`, SDKMAN, etc.)945- `bash` (Git Bash on Windows works) and either `zip` or the `jar` binary that ships with the JDK946- Network access to `https://edt.1c.ru/`, `https://download.eclipse.org/` and Maven Central — Tycho downloads the EDT p2 repository and Eclipse SDK on the first run (hundreds of MB, cached afterwards under `~/.m2/`)947948### Quick start949950```bash951# from the repo root952bash source/compile.sh --skip-tests953```954955Output:956957```958source/dist/MCP-EDT.v<VERSION>.zip959```960961This is a valid p2 update site — install via EDT → *Help → Install New Software → Add → Archive…*.962963### Script options964965`source/compile.sh` accepts every path as a flag (with matching environment-variable fallback) so it can be driven from CI or run against an out-of-tree checkout:966967| Flag | ENV fallback | Default | Meaning |968|---|---|---|---|969| `--skip-tests` | — | off | Skip Maven Surefire tests |970| `--version X.Y.Z` | — | parsed from `README.md`, falls back to `dev` | Version label used in the output zip name |971| `--archive-prefix PREFIX` | — | `MCP-EDT.v` | Archive name prefix (final name: `<prefix><version>.zip`) |972| `--project-root PATH` | `EDT_MCP_PROJECT_ROOT` | parent of script dir | Repo root containing `mcp/` |973| `--mcp-dir PATH` | — | `<project-root>/mcp` | Maven project directory |974| `--repo-dir PATH` | — | `<project-root>/mcp/repositories/com.ditrix.edt.mcp.server.repository/target/repository` | Tycho p2 output to repackage |975| `--output-dir PATH` | `EDT_MCP_OUTPUT_DIR` | `<script-dir>/dist` | Where the final zip lands |976| `--java-home PATH` | `JAVA_HOME` | — | JDK 17 home; if set, prepended to `PATH` for Maven |977| `--maven-home PATH` | `MAVEN_HOME` / `M2_HOME` | — | Maven home (uses `<maven-home>/bin/mvn`); otherwise falls back to `mvn` on `PATH` |978| `-h`, `--help` | — | — | Show help |979980### Examples981982```bash983# Self-contained invocation, no env tweaks required984bash source/compile.sh \985 --java-home "/c/Program Files/Java/jdk-17" \986 --maven-home /d/Soft/maven \987 --skip-tests \988 --version 1.27.1989990# Drop the artifact somewhere else991bash source/compile.sh --output-dir /tmp/edt-mcp-builds992993# Same, configured via environment994JAVA_HOME="/c/Program Files/Java/jdk-17" \995MAVEN_HOME=/d/Soft/maven \996EDT_MCP_OUTPUT_DIR=/tmp/edt-mcp-builds \997bash source/compile.sh998```9991000### Notes10011002- A full first build pulls the EDT 2026.1 p2 repository (`mcp/targets/default/default.target`) and the Eclipse 2023-12 release — expect several minutes. Subsequent builds run in ~1 minute thanks to the local p2 cache.1003- The output zip uses forward-slash entries (produced by `jar` when `zip` is unavailable) so it installs cleanly on both Windows and Linux EDT instances.1004- `source/dist/` is gitignored; only the script itself is tracked.10051006## AI-assisted development: the `edt-mcp-autopilot` skill10071008This repository ships a Claude Code project skill at `.claude/skills/edt-mcp-autopilot/` that takes a whole task or issue end-to-end with minimal human input, using a multi-agent, Spec-Driven (SDD) pipeline. The code-conduct it follows lives in [CLAUDE.md](CLAUDE.md) and the sibling skills under `.claude/skills/`.10091010**Pipeline (phases):** study the task → documentation researchers → several waves of code researchers (loop-until-dry) → adversarial critics (refuted findings dropped, "rework" bounced back) → an architect that synthesises a spec and a file-disjoint developer partition → N parallel developers → a 3–4 reviewer loop until clean → build + unit tests → live-stand scenarios → a Russian issue comment and a pull request.10111012**How to run (Claude Code):** the skill is auto-discovered from `.claude/skills/`. Invoke it with10131014```1015/edt-mcp-autopilot <issue number or task description>1016```10171018It runs unattended: the only mandatory human touchpoint is confirming the live-stand result before shipping; principal design questions are posted to the issue and polled until answered. The heavy fan-out runs through the Claude Code `Workflow` tool (the two scripts under `references/`), orchestrated by the main session as a "conductor". Scale the fan-out with the `size` argument (`small` / `medium` / `large`).10191020### ⚠️ This skill consumes a LOT of tokens10211022It deliberately spawns many subagents — documentation and code researchers in waves, a critic panel, parallel developers, and a cyclic reviewer pool. Measured cost per real task in this repository (subagent tokens only — the conductor, the Maven build and the live-stand verification add more on top):10231024| Phase | Subagents | Subagent tokens | Wall time |1025|---|---|---|---|1026| Discover (research → critics → architect) | ~8–9 | ~0.6–0.9 M | ~15 min |1027| Build (parallel developers → reviewer loop) | ~11–15 | ~0.7–0.8 M | ~15 min |10281029So a single task's discover + build phases alone are roughly **20–25 subagents and ~1.3–1.8 M subagent tokens**; a full end-to-end task (with the conductor, the builds, golden regeneration and live-stand checks) typically runs **several million tokens and 30–60+ minutes**. A misconfigured run can be far worse — an early, pre-hardened version once burned ~9.8 M tokens / ~210 agents on a no-op before the guard rails were added.10301031Use it for substantial whole-task work — a feature, a non-trivial bug, or a new tool — **not** for small edits or quick questions, where working directly is far cheaper.10321033## Requirements10341035- 1C:EDT 2026.1 (Ruby)1036- Java 17+10371038## License1039# Copyright (C) 2026 DitriX1040# Licensed under GNU AGPL v3.01041
Full transparency — inspect the skill content before installing.