Skip to content

DitriXNew/EDT-MCP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub all releases

Build & Unit Tests Quality Gate Status Bugs Code Smells Coverage

E2E 2025.2 E2E 2026.1

Conformance 2025.2 Conformance 2026.1

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 per EDT version (2025.2 and 2026.1, each its own badge): 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. (New CI badges render once these workflows land on the default branch.)

EDT MCP Server

MCP (Model Context Protocol) server plugin for 1C:EDT, enabling AI assistants (Claude, GitHub Copilot, Cursor, etc.) to interact with EDT workspace.

Tip

Contributing / making changes? Read 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/.

Important

EDT version compatibility: EDT 2025.2+ is supported

Features

  • 🔧 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 Descriptions - Get check documentation from markdown files
  • 🔄 Project Revalidation - Trigger revalidation when validation gets stuck
  • 🔖 Bookmarks & Tasks - Access bookmarks and TODO/FIXME markers
  • 💡 Content Assist - Get type info, method hints and platform documentation at any code position
  • 🧪 Query Validation - Validate 1C query text in project context (syntax + semantic errors, optional DCS mode)
  • 🧩 BSL Code Analysis - Browse modules, inspect structure, read/write methods, search code, and analyze call hierarchy
  • 🖼️ Form Inspection - Get PNG screenshots and YAML layout snapshots from the form WYSIWYG editor
  • 🚀 Application Management - Get applications, update database, launch in debug mode, terminate EDT-launched 1С clients
  • 🎯 Status Bar - Real-time server status with tool name, execution time, and interactive controls
  • Interruptible Operations - Cancel long-running operations and send signals to AI agent
  • 🏷️ Metadata Tags - Organize objects with custom tags, filter Navigator, keyboard shortcuts (Ctrl+Alt+1-0), multiselect support
  • 📁 Metadata Groups - Create custom folder hierarchy in Navigator tree per metadata collection, with a toolbar toggle to hide groups temporarily
  • ✏️ 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 objects
  • 🛠️ Tool Management - Enable/disable tools by group, presets (Analysis Only, Code Review, Development), per-tool parameter defaults

Installation

From Update Site

  1. In EDT: Help → Install New Software...
  2. Add update site URL: https://ditrixnew.github.io/EDT-MCP/
  3. Select EDT MCP Server Feature
  4. Restart EDT

From Windows command line - "one shot" very fast install

Close your EDT (!) and run:

rem Here  "%VER_EDT% = 2025.2.3+30"  just for example - please, set YOUR actual version !
set VER_EDT=2025.2.3+30

"\your\path\to\EDT\components\1c-edt-%VER_EDT%-x86_64\1cedt.exe" -nosplash ^
    -application org.eclipse.equinox.p2.director ^
    -repository https://ditrixnew.github.io/EDT-MCP/ ^
	-installIU com.ditrix.edt.mcp.server.feature.feature.group ^
	-profileProperties org.eclipse.update.reconcile=true

Installation Result

Details Once the installation has been completed successfully, we will see the following:

MCP Server After Install

After that, EDT will automatically monitor the update site and install available updates when detected.

As well, we can also manually check via Help → About → Installation Details → Select MCP → Update

Required JVM flag for form screenshots

The get_form_screenshot and get_form_layout_snapshot tools need EDT to be launched with the following JVM flag:

-DnativeFormBufferedLayoutRender=true

Without it, both tools return blank output (gray PNG / empty elements list).

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.

How to add it (persistent, recommended):

  1. Close EDT.

  2. 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).

  3. After the -vmargs line, add:

    -DnativeFormBufferedLayoutRender=true
    
  4. Start EDT.

How to add it (one-shot, no install changes):

"<path-to-EDT>\1cedt.exe" -data "<workspace>" -vmargs -DnativeFormBufferedLayoutRender=true

The same flag is also recommended for production EDT use — it enables the buffered native renderer that EDT itself benefits from.

If 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.

Configuration

Go to Window → Preferences → MCP Server. The settings page has two tabs:

General Tab

  • Server Port: HTTP port (default: 8765)
  • Check descriptions folder: Path to check description markdown files
  • Auto-start: Start server on EDT launch
  • Plain text mode (Cursor compatibility): Returns results as plain text instead of embedded resources (for AI clients that don't support MCP resources)
  • Show tags in Navigator: Display tags as decorations in the Navigator tree
  • Tag decoration style: How tags are displayed — all tags as suffix, first tag only, or tag count
  • Server control: Start, stop, and restart the MCP server directly from preferences

Tools Tab

Manage which tools are available to AI assistants. Tools are organized into groups that can be enabled or disabled together. See Tool Management for details.

MCP Server Settings

Status Bar Controls

The MCP server status bar shows real-time execution status with interactive controls.

Status Indicator:

  • 🟢 Green - Server running, idle
  • 🟡 Yellow blinking - Tool is executing
  • Grey - Server stopped

Status Bar Menu

User Signal Controls - Send signals to AI agent during tool execution

During Tool Execution:

  • Shows tool name (e.g., MCP: update_database)
  • Shows elapsed time in MM:SS format
  • Click to access control menu

When a tool is executing, you can send signals to the AI agent to interrupt the MCP call:

Button Description When to Use
Cancel Operation Stops the MCP call and notifies agent When you want to cancel a long-running operation
Retry Tells agent to retry the operation When an EDT error occurred and you want to try again
Continue in Background Notifies agent the operation is long-running When you want agent to check status periodically
Ask Expert Stops and asks agent to consult with you When you need to provide guidance
Send Custom Message... Send a custom message to agent For any custom instruction

How it works:

  1. When you click a button, a dialog appears showing the message that will be sent to the agent
  2. You can edit the message before sending
  3. The MCP call is immediately interrupted and returns control to the agent
  4. The EDT operation continues running in the background
  5. Agent receives a response like:
USER SIGNAL: Your message here

Signal Type: CANCEL
Tool: update_database
Elapsed: 20s

Note: The EDT operation may still be running in background.

Use cases:

  • Long-running operations (full database update, project validation) blocking the agent
  • Need to give the agent additional instructions
  • EDT showed an error dialog and you want agent to retry
  • Want to switch agent's focus to a different task

Tool Management

Control which MCP tools are exposed to AI assistants. This lets you reduce context window usage and restrict AI to read-only operations when needed.

Tool Groups

All 65 tools are organized into 9 semantic groups:

Group Description Tools
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
Errors & Problems Error reporting and workspace markers (bookmarks, tasks) get_problem_summary, get_project_errors, get_markers
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
Tags Tag management get_tags, get_objects_by_tags
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
Debugging Breakpoints, stepping, variable inspection set_breakpoint, remove_breakpoint, list_breakpoints, wait_for_break, get_variables, step, resume, evaluate_expression, debug_yaxunit_tests, debug_status, start_profiling, stop_profiling, get_profiling_results
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, validate_query
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
Translation (LanguageTool) Translation strings generation, configuration synchronization, project info generate_translation_strings, translate_configuration, get_translation_project_info

Enable 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.

Presets

Quickly switch between common tool configurations using presets:

Preset Description
All Tools All 65 tools enabled (default)
Analysis Only Read-only analysis — Core, Errors, Code Intelligence, Tags
Code Review Analysis + BSL code reading (excludes write_module_source)
Development Full development without debugging tools

Select 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.

Per-Tool Parameter Defaults

Some tools have configurable default values for parameters like result limits. These defaults are used when the AI client doesn't specify the parameter explicitly:

Tool Parameter Default Range
get_project_errors Result limit 100 1–1000
get_markers Result limit 100 1–1000
get_metadata_objects Result limit 100 1–1000
get_content_assist Result limit 100 1–1000
search_in_code Max results 100 1–500
search_in_code Context lines 2 0–5
read_module_source Max lines 500 100–50000
terminate_launch Termination timeout (sec) 10 1–120

Configure 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.

Progressive Tool Disclosure (dynamic toolsets)

For clients that work better with a small initial tool surface, the server can expose only a core toolset up front and reveal the rest on demand — shrinking the always-loaded tools/list. This is off by default (the full list is exposed, unchanged); turn it on with the Progressive disclosure preference (or the EDT_MCP_PROGRESSIVE_DISCLOSURE=true environment variable for headless/CI runs).

When on, only the core toolset (navigation, source read, metadata discovery, and the two management tools) appears in tools/list. To use more tools:

  1. Call list_toolsets to see the groups (core, metadata, code, debug, testing, profiling, forms, tags, translation, project) and their tools.
  2. Call enable_toolset with toolsets=[ids] (e.g. ["code","debug"]).
  3. Re-request tools/list — the revealed tools now appear.

This server does not push notifications/tools/list_changed, so the client must re-list after enabling (the enable_toolset response says so). A hidden tool is only hidden from tools/list; it remains callable by name. These progressive-disclosure toolsets are distinct from the Tool Groups above (which the Tools tab uses to enable/disable tools persistently).

Connecting AI Assistants

VS Code / GitHub Copilot

Create .vscode/mcp.json:

{
  "servers": {
    "EDT MCP Server": {
      "type": "sse",
      "url": "http://localhost:8765/mcp"
    }
  }
}
Other AI Assistants - Cursor, Claude Code, Claude Desktop

Cursor IDE

Note: Cursor doesn't support MCP embedded resources. Enable "Plain text mode (Cursor compatibility)" in EDT preferences: Window → Preferences → MCP Server.

Create .cursor/mcp.json:

{
  "mcpServers": {
    "EDT MCP Server": {
      "url": "http://localhost:8765/mcp"
    }
  }
}

Claude Code

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.

Add to .claude.json (in Windows %USERPROFILE%\.claude.json):

"mcpServers": {
  "EDT MCP Server": {
    "type": "http",
    "url": "http://localhost:8765/mcp"
  }
}

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "EDT MCP Server": {
      "url": "http://localhost:8765/mcp"
    }
  }
}

Cline - extension for VSCode.

{
  "mcpServers": {
    "EDTMCPServer": {
      "type": "streamableHttp",
      "url": "http://localhost:8765/mcp"
    }
  }
}

Antigravity

{
    "mcpServers": {
        "EDTMCPServer": {
            "serverUrl": "http://localhost:8765/mcp"
        }
    }
}

Available Tools

The full per-tool reference lives in docs/tools/ — one page per tool (what it does, every parameter, and how it works), generated from the live MCP server (get_tool_guide) so it never drifts from the code. Index below; re-generate with python docs/generate_tool_docs.py.

70 tools, grouped by toolset. Full per-tool pages under docs/tools/.

Core

Always-on essentials: project/module navigation, source read, metadata discovery, and the toolset-management tools (list_toolsets / enable_toolset).

Tool Description
enable_toolset 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…
get_edt_version Returns the running 1C:EDT version as a plain version string. Returns "Unknown" when the version cannot be determined.
get_metadata_details 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…
get_metadata_objects Get a flat list of 1C configuration metadata objects (Name, Synonym, Comment, Type, ObjectModule, ManagerModule) as a Markdown table. Use it to discover what…
get_module_structure Get structure of a BSL module: all procedures/functions with signatures, line numbers, regions, execution context (&AtServer, &AtClient), export flag, and pa…
get_server_status Self-diagnosis snapshot of the running MCP server: listening port, MCP protocol version, plugin version, EDT version, enabled/total tool counts, the plainTex…
get_tool_guide 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…
list_modules 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…
list_projects List all workspace projects with properties (name, path, type, natures)
list_toolsets List the tool groups (toolsets) used by progressive tool disclosure: each toolset's id, title, description, member tools, and whether it is currently visible…
read_module_source 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…
search_in_code 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…

Metadata

Metadata objects: discovery, create/modify/delete/rename/adopt, subsystems, configuration.

Tool Description
adopt_metadata_object Adopt a base-configuration metadata object or member (object / form / attribute / tabular section / ...) into a configuration EXTENSION so the extension can…
create_launch_config 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…
create_metadata 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…
delete_launch_config 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…
delete_metadata Delete a metadata node (object or member, including a FORM object 'Type.Object.Form.Name' or a FORM member - item / attribute / command / handler) addressed…
get_configuration_properties Get 1C:Enterprise configuration properties (name, synonym, comment, script variant, compatibility mode, etc.)
get_subsystem_content 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…
list_configurations List EDT launch configurations (runtime client + Attach + other 1C types) with their running state. This is the discovery step before debug_launch / run_yaxu…
list_subsystems List 1C subsystems of a configuration as a flat table (FQN, Synonym, Comment, InCommandInterface, content count, children count). Walks the whole tree by def…
modify_metadata 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…
rename_metadata_object 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…

Code

BSL code: write/read methods, call hierarchy, go-to-definition, references, content assist, queries.

Tool Description
find_references 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…
get_content_assist 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…
get_method_call_hierarchy 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…
get_symbol_info Get type/hover info about a symbol at a position in a BSL module. Returns inferred types, signatures, and documentation.
go_to_definition Go to the definition of a symbol (the inverse of find_references): a qualified method 'ModuleName.MethodName', a bare 'MethodName' (also pass modulePath), or…
read_method_source 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…
validate_query 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…
write_module_source 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…

Debug

Runtime debugging: launch/attach, breakpoints, step/resume, variables, expression evaluation.

Tool Description
debug_launch Start an EDT debug session: either an existing config by launchConfigurationName (runtime client OR Attach, the latter needed to debug server-side code), or…
debug_status Report active debug sessions: applicationId (real or synthetic 'attach:' / 'launch:'), launch configuration name/type, mode (debug/run), whether…
evaluate_expression 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…
get_applications Get list of applications (infobases) for a project. Returns application ID, name, type, and update state. Application ID is required for update_database and…
get_variables 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…
list_breakpoints List active line breakpoints. Optionally filter by projectName.
remove_breakpoint Remove a 1C BSL line breakpoint. Either pass breakpointId (returned from set_breakpoint) or projectName+module+lineNumber to look it up by coordinates.
resume 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…
set_breakpoint 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…
step Step a suspended debug thread. kind ∈ {over, into, out}. Blocks until the next SUSPEND event (or timeout) and returns the new frame snapshot.
terminate_launch Terminate one or more 1C launches started from THIS EDT instance; externally launched 1C clients are never touched. Select ONE target mode: launchConfigurati…
wait_for_break 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…

Testing

YAXUnit unit testing: run and debug test suites.

Tool Description
debug_yaxunit_tests 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…
run_yaxunit_tests 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 (…

Profiling

Performance profiling: start/stop a measurement and read the results.

Tool Description
get_profiling_results Get profiling (performance measurement) results after a debug session: per-module, per-line call count, timing and percentage. Returns only the MOST RECENT m…
start_profiling 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…
stop_profiling Stop performance measurement on the active debug target. Counterpart to start_profiling: deterministically switches profiling off. Idempotent: if profiling i…

Forms

Managed-form rendering: layout snapshot and screenshot.

Tool Description
get_form_layout_snapshot 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…
get_form_screenshot 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…

Tags

Tag-based organization: list tags and find objects by tag.

Tool Description
get_objects_by_tags Get metadata objects filtered by tags. Returns objects that have any of the specified tags, including tag descriptions and object FQNs.
get_tags 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…

Translation

Configuration translation via LanguageTool: extract, translate, project info.

Tool Description
generate_translation_strings Generate translation strings (.lstr/.trans/.dict) for a configuration project: scans translatable features and writes the resulting keys into the project's s…
get_translation_project_info 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…
translate_configuration Run EDT 'Translate configuration' on a configuration project - reads the dictionaries from the storages bound to it (external dictionary storage projects wit…

Project

Project operations: clean/revalidate, update DB, export/import XML, problems and markers, docs.

Tool Description
clean_project Clean EDT project and trigger full revalidation. Refreshes files from disk, clears all validation markers, and waits for EDT to complete revalidation.
create_infobase 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'…
create_project Create a NEW 1C project in the EDT workspace. projectKind selects the kind: 'configuration' (standalone), 'extension' (bound to a base configuration), or 'ex…
delete_infobase Remove a FILE infobase association from a configuration project (and optionally deregister it from the global EDT infobases list). Destructive: guarded by a…
delete_project Remove an EDT project from the workspace, optionally deleting its files from disk (deleteContent). Destructive: guarded by a confirm-preview - call without c…
export_configuration_to_xml Export an EDT configuration project to XML files (EDT menu: Export -> Configuration to XML Files). Equivalent of 1C platform DumpConfigToFiles.
get_check_description 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…
get_markers List workspace markers: bookmarks and/or task markers (TODO, FIXME, XXX, HACK). Filter by markerKind (bookmark | task; omit to list both), projectName, fileP…
get_platform_documentation Look up 1C:Enterprise platform documentation for built-in types (ValueTable, Array, Structure) and global built-in functions, including their methods, proper…
get_problem_summary Get problem summary with counts grouped by project and EDT severity level (ERRORS, BLOCKER, CRITICAL, MAJOR, MINOR, TRIVIAL). Use this for severity totals on…
get_project_errors List EDT configuration problems (validation markers) with optional project / severity / check-id / object filters. Each row carries the check code, message,…
import_configuration_from_xml 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…
resync_to_disk Bulk re-synchronize the in-memory BM model to the on-disk src/ .mdo files and report BM-to-disk desync. Walks EVERY top metadata object of the configuration…
revalidate_objects Revalidate EDT project or specific objects. If objects array is empty or missing, revalidates entire project. FQN examples: 'Document.SalesOrder', 'Catalog.P…
update_database Apply configuration changes to an application's database (infobase), full or incremental. Target by launchConfigurationName (preferred) or projectName + appl…

Output Formats

Each 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.

Response format policy (Markdown vs JSON)

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.

A tool returns JSON only when its result carries at least one of:

  • (a) round-trip IDs another tool consumes (e.g. a created object's FQN, a launch/application ID, a breakpoint ID);
  • (b) machine-structured positions (e.g. an error line/column);
  • (c) a declared outputSchema;
  • (d) UI-rendered data.

An 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).

Which tool families stay JSON, and why:

  • metadata-writes (create_metadata, modify_metadata, delete_metadata, via AbstractMetadataWriteTool) — return the edited object's round-trip FQN (a);
  • debug / profiling tools — return launch / application / breakpoint IDs and live session state consumed by follow-up calls (a);
  • validate_query — returns the error line/column (b);
  • list_configurations — returns config identities consumed by other tools (a);
  • clean_project / update_database — return a destructive status whose JSON shape is asserted by e2e (d-like contract).

Errors are reported the same way regardless of a tool's normal format — see the Error contract below.

  • 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, list_modules, list_subsystems, list_configurations, get_project_errors, 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.)
  • YAML tools: get_configuration_properties — returns a human-readable YAML body as an EmbeddedResource (resource named *.yaml, mimeType: text/yaml).
  • 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, plus the metadata-write tools that inherit JSON from AbstractMetadataWriteTool (create_metadata, modify_metadata, delete_metadata).
  • Text tools (plain text): get_edt_version, get_form_layout_snapshot.
  • Image tools: get_form_screenshot — returns the rendered form as an EmbeddedResource with an image/* mimeType.

Error contract

Whatever 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.

Tool annotations

Every 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):

Hint Meaning When set
readOnlyHint The tool does not modify the workspace true for get_* / list_* / read_* / search_* / find_* / validate_*; false for write and destructive tools
idempotentHint Repeating the call has no additional effect true for the read-only tools above
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
openWorldHint The tool interacts with an external/open world always false — the server operates only on the local EDT workspace

Only 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.

API Endpoints

Endpoint Method Description
/mcp POST MCP JSON-RPC (initialize, tools/list, tools/call)
/mcp GET Server info
/health GET Health check

Security & trust model

The MCP server is a local developer tool and is secured for that model:

  • 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.
  • 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).
  • 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.
  • 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).
  • export_configuration_to_xml / import_configuration_from_xml read/write arbitrary filesystem paths (the broadest FS primitives in the surface). They are trusted-caller-only; a warning is logged and the Markdown result flags outsideWorkspace when a path is outside the EDT workspace.

Metadata Tags

Organize your metadata objects with custom tags for easier navigation and filtering.

Why Use Tags?

Tags help you:

  • Group related objects across different metadata types (e.g., all objects for a specific feature)
  • Quickly find objects in large configurations
  • Filter the Navigator to focus on specific areas of the project
  • Share object organization with your team via version control

Getting Started

Assigning Tags to Objects:

  1. Right-click on any metadata object in the Navigator
  2. Select Tags from the context menu
  3. Check the tags you want to assign, or select Manage Tags... to create new ones

Tags Context Menu

Managing Tags:

In the Manage Tags dialog you can:

  • Create new tags with custom names, colors, and descriptions
  • Edit existing tags (name, color, description)
  • Delete tags
  • See all available tags for the project

Manage Tags Dialog

Viewing Tags in Navigator

Tagged objects show their tags as a suffix in the Navigator tree:

Navigator with Tags

To enable/disable tag display:

  • Window → Preferences → General → Appearance → Label Decorations
  • Toggle "Metadata Tags Decorator"

Filtering Navigator by Tags

Filter the entire Navigator to show only objects with specific tags:

  1. Click the tag filter button in the Navigator toolbar (or right-click → Tags → Filter by Tag...)
  2. Select one or more tags
  3. Click Set to apply the filter

Filter by Tag Dialog

The Navigator will show only:

  • Objects that have ANY of the selected tags
  • Parent folders containing matching objects

To clear the filter: Click Turn Off in the dialog or use the toolbar button again.

Keyboard Shortcuts for Tags

Quickly toggle tags on selected objects using keyboard shortcuts:

Shortcut Action
Ctrl+Alt+1 Toggle 1st tag
Ctrl+Alt+2 Toggle 2nd tag
... ...
Ctrl+Alt+9 Toggle 9th tag
Ctrl+Alt+0 Toggle 10th tag

Features:

  • Works with multiple selected objects
  • Supports cross-project selection (each object uses tags from its own project)
  • Pressing the same shortcut again removes the tag (toggle behavior)
  • Tag order is configurable in the Manage Tags dialog (Move Up/Move Down buttons)

To customize shortcuts: Window → Preferences → General → Keys → search for "Toggle Tag"

Filtering Untagged Objects

Find metadata objects that haven't been tagged yet:

  1. Open Filter by Tag dialog (toolbar button or Tags → Filter by Tag...)
  2. Check the "Show untagged objects only" checkbox
  3. Click Set

The Navigator will show only objects that have no tags assigned, making it easy to identify objects that need categorization.

Multi-Select Tag Assignment

Assign or remove tags from multiple objects at once:

  1. Select multiple objects in the Navigator (Ctrl+Click or Shift+Click)
  2. Right-click → Tags
  3. Select a tag to toggle it on/off for ALL selected objects

Behavior:

  • ✓ Checked = all selected objects have this tag
  • ☐ Unchecked = none of the selected objects have this tag
  • When objects are from different projects, only objects from projects that have the tag will be affected

Tag Filter View

For advanced filtering across multiple projects, use the Tag Filter View:

Window → Show View → Other → MCP Server → Tag Filter

This view provides:

  • Left panel: Select tags from all projects in your workspace
  • Right panel: See all matching objects with search and navigation
  • Search: Filter results by object name using regex
  • Double-click: Navigate directly to the object

Where Tags Are Stored

Tags are stored in .settings/metadata-tags.yaml file in each project. This file:

  • Can be committed to version control (VCS friendly)
  • Is automatically updated when you rename or delete objects
  • Uses YAML format for easy readability

Example:

assignments:
  CommonModule.Utils:
    - Utils
  Document.SalesOrder:
    - Important
    - Sales
tags:
  - color: '#FF0000'
    description: Critical business logic
    name: Important
  - color: '#00FF00'
    description: ''
    name: Utils
  - color: '#0066FF'
    description: Sales department documents
    name: Sales

Metadata Groups

Organize your Navigator tree with custom groups to create a logical folder structure for metadata objects.

Why Use Groups?

Groups help you:

  • Create custom folder hierarchy in the Navigator tree
  • Organize objects by business area, feature, or any logical structure
  • Navigate large configurations faster with nested groups
  • Separate grouped objects from ungrouped ones

Getting Started

Creating a Group:

  1. Right-click on any metadata folder (e.g., Catalogs, Common modules) in the Navigator
  2. Select New Group... from the context menu
  3. Enter the group name and optional description
  4. Click OK to create the group

New Group Context Menu

Create Group Dialog:

New Group Dialog

Adding Objects to a Group:

  1. Right-click on any metadata object in the Navigator
  2. Select Add to Group...
  3. Choose the target group from the list

Add to Group Menu

Removing Objects from a Group:

  1. Right-click on an object inside a group
  2. Select Remove from Group

Viewing Groups in Navigator

Grouped objects appear inside their group folders in the Navigator tree:

Navigator with Groups - Common Modules

Navigator with Groups - Catalogs

Key Features:

  • Groups are created per metadata collection (Catalogs, Common modules, Documents, etc.)
  • Objects inside groups are still accessible via standard EDT navigation
  • Ungrouped objects appear at the end of the list
  • Use the Hide Groups toggle button in the Navigator toolbar to temporarily hide virtual group folders and show grouped objects in their original collections again

Group Operations

Action How to Do It
Create group Right-click folder → New Group...
Add object to group Right-click object → Add to Group...
Remove from group Right-click object in group → Remove from Group
Copy group name Select group → Ctrl+C
Delete group Right-click group → Delete
Rename group Right-click group → Rename...
Hide/show groups Click Hide Groups in the Navigator toolbar

Where Groups Are Stored

Groups are stored in .settings/groups.yaml file in each project. This file:

  • Can be committed to version control (VCS friendly)
  • Uses YAML format for easy readability
  • Is automatically updated when you rename or delete objects

Example:

groups:
- name: "Products & Inventory"
  description: "Product and inventory catalogs"
  path: Catalog
  order: 0
  children:
    - Catalog.ItemKeys
    - Catalog.Items
    - Catalog.ItemSegments
    - Catalog.Units
    - Catalog.UnitsOfMeasurement
- name: "Organization"
  description: "Organization structure catalogs"
  path: Catalog
  order: 1
  children:
    - Catalog.Companies
    - Catalog.Stores
- name: "Core Functions"
  description: "Core shared functions used across the application"
  path: CommonModule
  order: 0
  children:
    - CommonModule.CommonFunctionsClient
    - CommonModule.CommonFunctionsServer
    - CommonModule.CommonFunctionsClientServer
- name: "Localization"
  description: "Multi-language support modules"
  path: CommonModule
  order: 1
  children:
    - CommonModule.Localization
    - CommonModule.LocalizationClient
    - CommonModule.LocalizationServer
    - CommonModule.LocalizationReuse

Building from source

The plugin is a Maven/Tycho project under mcp/. CI builds it via .github/workflows/build.yml; the same flow can be run locally with source/compile.sh.

Prerequisites

  • JDK 17 (e.g. Temurin / Oracle JDK)
  • Apache Maven 3.9+ (no mvnw wrapper is committed — install Maven manually or via a package manager: winget, Homebrew, apt, SDKMAN, etc.)
  • bash (Git Bash on Windows works) and either zip or the jar binary that ships with the JDK
  • 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/)

Quick start

# from the repo root
bash source/compile.sh --skip-tests

Output:

source/dist/MCP-EDT.v<VERSION>.zip

This is a valid p2 update site — install via EDT → Help → Install New Software → Add → Archive….

Script options

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:

Flag ENV fallback Default Meaning
--skip-tests off Skip Maven Surefire tests
--version X.Y.Z parsed from README.md, falls back to dev Version label used in the output zip name
--archive-prefix PREFIX MCP-EDT.v Archive name prefix (final name: <prefix><version>.zip)
--project-root PATH EDT_MCP_PROJECT_ROOT parent of script dir Repo root containing mcp/
--mcp-dir PATH <project-root>/mcp Maven project directory
--repo-dir PATH <project-root>/mcp/repositories/com.ditrix.edt.mcp.server.repository/target/repository Tycho p2 output to repackage
--output-dir PATH EDT_MCP_OUTPUT_DIR <script-dir>/dist Where the final zip lands
--java-home PATH JAVA_HOME JDK 17 home; if set, prepended to PATH for Maven
--maven-home PATH MAVEN_HOME / M2_HOME Maven home (uses <maven-home>/bin/mvn); otherwise falls back to mvn on PATH
-h, --help Show help

Examples

# Self-contained invocation, no env tweaks required
bash source/compile.sh \
    --java-home "/c/Program Files/Java/jdk-17" \
    --maven-home /d/Soft/maven \
    --skip-tests \
    --version 1.27.1

# Drop the artifact somewhere else
bash source/compile.sh --output-dir /tmp/edt-mcp-builds

# Same, configured via environment
JAVA_HOME="/c/Program Files/Java/jdk-17" \
MAVEN_HOME=/d/Soft/maven \
EDT_MCP_OUTPUT_DIR=/tmp/edt-mcp-builds \
bash source/compile.sh

Notes

  • A full first build pulls the EDT 2025.2 / 2026.1 p2 repository (depending on 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.
  • 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.
  • source/dist/ is gitignored; only the script itself is tracked.

Requirements

  • 1C:EDT 2025.2 (Ruby) or later
  • Java 17+

License

Copyright (C) 2026 DitriX

Licensed under GNU AGPL v3.0