mcpField
1
1C MCP Metacode

1C MCP Metacode

リモート
github.com/ROCTUP開発ツール11110 週間前に更新
リポジトリ

1C MCP Metacode について

1C Metacode は、1C 設定のメタデータとコードを Neo4j グラフデータベースに読み込む MCP サーバーです。MCP ツール、Web コンソール、組み込みの AI エージェントを提供し、1C 設定を分析する開発者を対象としています。基本設定と拡張機能など複数のプロジェクトを同時に扱えます。

主な機能

  1. 01メタデータとコードの Neo4j グラフへの読み込み
  2. 02拡張機能と基本設定の関連付け
  3. 03BSL コードに対する全文・ベクトル・ハイブリッド検索
  4. 04コールグラフとオブジェクト間の関係の照会
  5. 05Web コンソールと組み込み AI エージェント
  6. 06自動フィルタリングによるマルチプロジェクト検索

活用シーン

  1. 011C のオブジェクト、フォーム、モジュール間の関係の分析
  2. 02BSL のプロシージャと関数の実装の検索
  3. 03拡張オブジェクトと基本設定オブジェクトの差分比較

MCP 対応

このプロジェクトは MCP サーバーであり、メタデータ、コード、呼び出し関係を照会するツールを streamable-http または SSE 経由で MCP クライアントに公開します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttp://localhost:6001/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

1C Metacode MCP Server

1С のメタデータと設定コードを Neo4j グラフデータベースに読み込み、設定データを分析するための MCP ツール、Web コンソール、組み込み AI エージェントを提供します。

主な機能

  • 設定レポート(.txt)または XML エクスポートから、1С 設定のすべてのメタデータを Neo4j グラフに読み込みます。
  • 1С 拡張機能を基本設定と同じプロジェクトに読み込み、両者の関連付けや拡張機能のオブジェクトと基本設定のオブジェクトの比較を行います。
  • マネージドフォームのデータを読み込みます:属性、要素、イベント、コマンド。フォームや要素のイベント、コマンドをハンドラーに関連付けます。
  • 定義済み値、ロール権限、イベントサブスクリプションを読み込み、ハンドラーに関連付けます。
  • メタデータオブジェクトのヘルプを読み込み、ヘルプやその他の説明フィールドからオブジェクトを全文検索します。
  • すべてのモジュール(通常フォームのフォームモジュールを含む)からプロシージャ/関数のシグネチャを読み込み、呼び出しグラフを構築します。
  • プロシージャ/関数の本体(通常フォームのフォームモジュールを含む)を読み込み、説明を全文検索、ベクトル検索、ハイブリッド検索します。
  • メタデータオブジェクトを幅広く関連付けます:属性、フォームコントロール、累積レジスター/情報レジスター、ドキュメントのレジスターへの移動、アクセス権限を関連付けます。
  • 変更されたデータ(メタデータとコード)をスケジュールに従って増分読み込みします。
  • BSL コードの本体をセマンティック検索します。
  • メタデータオブジェクトの LLM 要約を生成し、その要約からオブジェクトを検索します。
  • Web コンソール(メタデータ、フォーム、コード、統計を表示)と組み込み AI エージェントを提供します。
  • マルチプロジェクト対応:複数のプロジェクト(基本設定+拡張機能)を同時に扱えます。検索はプロジェクトで自動的に絞り込まれ、別のプロジェクトから他のプロジェクトにアクセスすることもできます。
  • MCP ツールの応答は TOON 形式と独自のコンパクト化システムの両方を使って最大限に圧縮されます。

データ構造

graph TB
    %% Иерархия: проект = базовая конфигурация + расширения
    Project(["Project<br/>Проект"]) -->|"HAS_CONFIGURATION"| Configuration(["Configuration<br/>Базовая конфигурация"])
    Project -->|"HAS_CONFIGURATION"| ExtConfiguration(["Configuration<br/>Конфигурация расширения<br/>(is_extension)"])
    ExtConfiguration -->|"EXTENDS"| Configuration
    Configuration -->|"HAS_CATEGORY"| MetadataCategory(["MetadataCategory<br/>Категория метаданных"])

    subgraph g_core [" "]
        MetadataObject(["MetadataObject<br/>Объект метаданных"])
        Role(["MetadataObject<br/>Роль"])
        Role -->|"GRANTS_ACCESS_TO"| MetadataObject
    end
    MetadataCategory -->|"CONTAINS_OBJECT"| MetadataObject
    MetadataCategory -->|"CONTAINS_OBJECT"| Role

    %% Данные и атрибуты
    subgraph g_data [" "]
        Attribute(["Attribute<br/>Атрибут"])
        TabularPart(["TabularPart<br/>Табличная часть"])
        TabularAttribute(["Attribute<br/>Атрибут табл. части"])
        Resource(["Resource<br/>Ресурс"])
        Dimension(["Dimension<br/>Измерение"])
        TabularPart -->|"HAS_ATTRIBUTE"| TabularAttribute
    end
    MetadataObject -->|"HAS_ATTRIBUTE"| Attribute
    MetadataObject -->|"HAS_TABULAR_PART"| TabularPart
    MetadataObject -->|"HAS_RESOURCE"| Resource
    MetadataObject -->|"HAS_DIMENSION"| Dimension

    %% Дополнительные сущности объекта
    subgraph g_child [" "]
        Layout(["Layout<br/>Макет"])
        Characteristic(["Characteristic<br/>Характеристика"])
        EnumValue(["EnumValue<br/>Значение перечисления"])
        JournalGraph(["JournalGraph<br/>Граф журнала"])
        AccountingFlag(["AccountingFlag<br/>Признак учёта"])
        DimensionAccountingFlag(["DimensionAccountingFlag<br/>Признак учёта субконто"])
        PredefinedItem(["PredefinedItem<br/>Предопределённый элемент"])
        PredefinedChild(["PredefinedItem<br/>Дочерний элемент"])
        SubsystemChild(["MetadataObject<br/>Дочерний объект<br/>(подсистемы)"])
        PredefinedItem -->|"HAS_CHILD"| PredefinedChild
    end
    MetadataObject -->|"HAS_LAYOUT"| Layout
    MetadataObject -->|"HAS_CHARACTERISTIC"| Characteristic
    MetadataObject -->|"HAS_ENUM_VALUE"| EnumValue
    MetadataObject -->|"HAS_GRAPH"| JournalGraph
    MetadataObject -->|"HAS_ACCOUNTING_FLAG"| AccountingFlag
    MetadataObject -->|"HAS_DIMENSION_ACCOUNTING_FLAG"| DimensionAccountingFlag
    MetadataObject -->|"HAS_PREDEFINED"| PredefinedItem
    MetadataObject -->|"CONTAINS_OBJECT"| SubsystemChild

    %% Использование и движения
    subgraph g_usage [" "]
        UsedInTarget(["Target Object<br/>Целевой объект"])
        RegisterObject(["Register<br/>Регистр"])
    end
    MetadataObject -->|"USED_IN"| UsedInTarget
    MetadataObject -->|"DO_MOVEMENTS_IN"| RegisterObject

    %% Формы и интерфейс
    subgraph g_form [" "]
        Form(["Form<br/>Форма"])
        FormControl(["FormControl<br/>Элемент формы"])
        FormControlChild(["FormControl<br/>Дочерний элемент"])
        FormControlEvent(["FormEvent<br/>Событие элемента"])
        FormEvent(["FormEvent<br/>Событие формы"])
        FormAttribute(["FormAttribute<br/>Атрибут формы"])
        FormEventAction(["FormEventAction<br/>Действие события"])
        FormCommand(["Command<br/>Команда формы"])
        EventHandler(["Routine<br/>Обработчик события"])
        ControlEventHandler(["Routine<br/>Обработчик события"])
        FormCommandHandler(["Routine<br/>Обработчик команды формы"])
        BindTarget(["Bind Target<br/>Цель связывания"])
        LinkedCommand(["Command<br/>Команда"])
        Form -->|"HAS_CONTROL"| FormControl
        Form -->|"HAS_EVENT"| FormEvent
        Form -->|"HAS_FORM_ATTRIBUTE"| FormAttribute
        Form -->|"HAS_COMMAND"| FormCommand
        FormControl -->|"HAS_CHILD"| FormControlChild
        FormControl -->|"HAS_EVENT"| FormControlEvent
        FormControl -->|"LINKS_TO_COMMAND"| LinkedCommand
        FormEvent -->|"HAS_EVENT_ACTION"| FormEventAction
        FormEvent -->|"HAS_HANDLER"| EventHandler
        FormControlEvent -->|"HAS_HANDLER"| ControlEventHandler
        FormCommand -->|"HAS_HANDLER"| FormCommandHandler
    end
    MetadataObject -->|"HAS_FORM"| Form
    FormControl -->|"BINDS_TO"| BindTarget

    %% Команды, HTTP, подписки
    subgraph g_cmd [" "]
        Command(["Command<br/>Команда"])
        UrlTemplate(["UrlTemplate<br/>Шаблон URL"])
        UrlMethod(["UrlMethod<br/>Метод URL"])
        UrlHandler(["Routine<br/>Обработчик HTTP"])
        EventSubscription(["EventSubscription<br/>Подписка на событие"])
        EventSubHandler(["Routine<br/>Обработчик подписки"])
        CommandHandler(["Routine<br/>Обработчик команды"])
        UrlTemplate -->|"HAS_URL_METHOD"| UrlMethod
        UrlMethod -->|"HAS_HANDLER"| UrlHandler
        EventSubscription -->|"USES_HANDLER"| EventSubHandler
        Command -->|"HAS_HANDLER"| CommandHandler
    end
    MetadataObject -->|"HAS_COMMAND"| Command
    MetadataObject -->|"HAS_URL_TEMPLATE"| UrlTemplate
    MetadataObject -->|"HAS_EVENT_SUBSCRIPTION"| EventSubscription

    %% Модули и код
    subgraph g_code [" "]
        Module(["Module<br/>Модуль"])
        Routine(["Routine<br/>Процедура/Функция"])
        CalledRoutine(["Called Routine<br/>Вызываемая процедура"])
        RoutineCodeUnit(["RoutineCodeUnit<br/>Единица кода"])
        Module -->|"DECLARES"| Routine
        Routine -->|"CALLS"| CalledRoutine
        Routine -->|"HAS_CODE_UNIT"| RoutineCodeUnit
        RoutineCodeUnit -->|"OF_ROUTINE"| Routine
    end
    MetadataObject -->|"HAS_MODULE"| Module

    %% Расширения 1С: содержимое расширения ↔ базовые объекты
    subgraph g_ext [" "]
        ExtCat(["MetadataCategory<br/>Категория (расширение)"])
        ExtObject(["MetadataObject<br/>Объект расширения"])
        ExtForm(["Form<br/>Форма расширения"])
        ExtAction(["FormEventAction<br/>Действие расширения"])
        ExtModule(["Module<br/>Модуль расширения"])
        ExtRoutine(["Routine<br/>Процедура расширения"])
        ExtCat -->|"CONTAINS_OBJECT"| ExtObject
        ExtObject -->|"HAS_FORM"| ExtForm
        ExtObject -->|"HAS_MODULE"| ExtModule
        ExtModule -->|"DECLARES"| ExtRoutine
        ExtForm -->|"HAS_EVENT_ACTION"| ExtAction
    end
    ExtConfiguration -->|"HAS_CATEGORY"| ExtCat
    ExtObject -->|"ADOPTED_FROM"| MetadataObject
    ExtForm -->|"ADOPTED_FROM"| Form
    ExtModule -->|"EXTENDS_MODULE"| Module
    ExtRoutine -->|"EXTENDS_ROUTINE"| Routine
    ExtAction -->|"EXTENDS_ACTION"| FormEventAction

    style g_ext fill:none,stroke:none

    style g_core fill:none,stroke:none
    style g_data fill:none,stroke:none
    style g_child fill:none,stroke:none
    style g_usage fill:none,stroke:none
    style g_form fill:none,stroke:none
    style g_cmd fill:none,stroke:none
    style g_code fill:none,stroke:none

    %% Стили узлов
    classDef projectClass fill:#FF6B6B,stroke:#C92A2A,stroke-width:2px,color:#000000
    classDef configClass fill:#4ECDC4,stroke:#26A69A,stroke-width:2px,color:#000000
    classDef categoryClass fill:#45B7D1,stroke:#1976D2,stroke-width:2px,color:#000000
    classDef objectClass fill:#96CEB4,stroke:#388E3C,stroke-width:2px,color:#000000
    classDef formClass fill:#FFEAA7,stroke:#FD8D3C,stroke-width:2px,color:#000000
    classDef formControlClass fill:#AED6F1,stroke:#3498DB,stroke-width:2px,color:#000000
    classDef formEventClass fill:#FF69B4,stroke:#C2185B,stroke-width:2px,color:#000000
    classDef formAttrClass fill:#A3E4D7,stroke:#1ABC9C,stroke-width:2px,color:#000000
    classDef formEventActionClass fill:#F5B7B1,stroke:#E74C3C,stroke-width:2px,color:#000000
    classDef tabularClass fill:#F7DC6F,stroke:#F39C12,stroke-width:2px,color:#000000
    classDef resourceClass fill:#F8C471,stroke:#E67E22,stroke-width:2px,color:#000000
    classDef dimensionClass fill:#82E0AA,stroke:#27AE60,stroke-width:2px,color:#000000
    classDef targetClass fill:#CACFD2,stroke:#7F8C8D,stroke-width:2px,color:#000000
    classDef moduleClass fill:#98D8C8,stroke:#16A085,stroke-width:2px,color:#000000
    classDef routineClass fill:#F1948A,stroke:#E74C3C,stroke-width:2px,color:#000000
    classDef codeUnitClass fill:#D7BDE2,stroke:#8E44AD,stroke-width:2px,color:#000000
    classDef commandClass fill:#E1BEE7,stroke:#9C27B0,stroke-width:2px,color:#000000
    classDef urlTemplateClass fill:#F9E79F,stroke:#F1C40F,stroke-width:2px,color:#000000
    classDef urlMethodClass fill:#D98880,stroke:#CD6155,stroke-width:2px,color:#000000
    classDef eventSubClass fill:#AEB6BF,stroke:#5D6D7E,stroke-width:2px,color:#000000
    classDef predefinedClass fill:#BB8FCE,stroke:#8E44AD,stroke-width:2px,color:#000000
    classDef bindTargetClass fill:#D5DBDB,stroke:#BDC3C7,stroke-width:2px,color:#000000
    classDef layoutClass fill:#F0E68C,stroke:#DAA520,stroke-width:2px,color:#000000
    classDef characteristicClass fill:#DEB887,stroke:#CD853F,stroke-width:2px,color:#000000
    classDef enumValueClass fill:#FFA07A,stroke:#FF6347,stroke-width:2px,color:#000000
    classDef journalGraphClass fill:#20B2AA,stroke:#008B8B,stroke-width:2px,color:#000000
    classDef accountingFlagClass fill:#87CEEB,stroke:#4682B4,stroke-width:2px,color:#000000
    classDef dimensionAccountingFlagClass fill:#DDA0DD,stroke:#BA55D3,stroke-width:2px,color:#000000
    classDef subsystemChildClass fill:#A8E6CF,stroke:#3D9970,stroke-width:2px,color:#000000
    classDef formControlChildClass fill:#B3E5FC,stroke:#03A9F4,stroke-width:2px,color:#000000
    classDef tabularAttributeClass fill:#90CAF9,stroke:#2196F3,stroke-width:2px,color:#000000
    classDef roleClass fill:#F1948A,stroke:#922B21,stroke-width:2px,color:#000000
    classDef extClass fill:#FAD7A0,stroke:#B9770E,stroke-width:2px,color:#000000

    %% Применение стилей
    class Project projectClass
    class Configuration configClass
    class MetadataCategory categoryClass
    class MetadataObject,SubsystemChild subsystemChildClass
    class Form formClass
    class FormControl,FormControlChild formControlChildClass
    class FormEvent,FormControlEvent formEventClass
    class FormAttribute formAttrClass
    class FormEventAction formEventActionClass
    class Attribute,TabularAttribute tabularAttributeClass
    class TabularPart tabularClass
    class Resource resourceClass
    class Dimension dimensionClass
    class UsedInTarget,RegisterObject targetClass
    class Module moduleClass
    class Routine,CalledRoutine,EventHandler,ControlEventHandler,UrlHandler,EventSubHandler,CommandHandler,FormCommandHandler routineClass
    class RoutineCodeUnit codeUnitClass
    class Command,FormCommand,LinkedCommand commandClass
    class UrlTemplate urlTemplateClass
    class UrlMethod urlMethodClass
    class EventSubscription eventSubClass
    class PredefinedItem,PredefinedChild predefinedClass
    class BindTarget bindTargetClass
    class Layout layoutClass
    class Characteristic characteristicClass
    class EnumValue enumValueClass
    class JournalGraph journalGraphClass
    class AccountingFlag accountingFlagClass
    class DimensionAccountingFlag dimensionAccountingFlagClass
    class Role roleClass
    class ExtConfiguration,ExtCat,ExtObject,ExtForm,ExtModule,ExtRoutine,ExtAction extClass

クイックスタート

Docker と Docker Compose が必要です。ポート 7474/7687(Neo4j)および 6001(MCP サーバーと Web コンソール)が空いている必要があります。

  1. .env.example.minimal を .env にコピーし(起動に必要な最小限の設定です。全項目は .env.example を参照)、少なくとも NEO4J_PASSWORD と PROJECT_NAME を設定します。
  2. docker-compose.example.yml を docker-compose.yml にコピーし、PROJECT_NAME(マルチプロジェクトの場合は各プロジェクトのポートも)を設定します。
  3. データを配置します:data/prj1/metadata(設定レポート .txt)、data/prj1/code (XML エクスポート)、必要に応じて data/prj1/extensions/<ExtName>。
  4. 起動します:
docker compose up -d

詳しい手順は docs/setup.md を参照してください。

更新

docker compose pull
docker compose up -d --force-recreate

データベースを削除して完全にリセットするには:

docker compose down --volumes
docker compose up -d --force-recreate

サービス

アプリケーションのログ:

docker compose logs -f <имя-сервиса>

MCP クライアントの接続

デフォルトのトランスポートは streamable-http です(MCP_USE_SSE=true の場合は SSE)。クライアント設定の例:

{
  "mcpServers": {
    "1c-metacode": {
      "url": "http://localhost:6001/mcp",
      "type": "streamable-http",
      "timeout": 300
    }
  }
}

ツール一覧と用途は docs/mcp-tools.md を参照してください。

Документация

ДокументО чём
docs/architecture.mdархитектура, модель графа, где что хранится
docs/setup.mdустановка, запуск, обслуживание
docs/loading-and-updates.mdзагрузка данных, флаги, инкрементальное обновление
docs/mcp-tools.mdсправочник инструментов MCP
docs/search.mdрежимы поиска и как их выбирать
docs/bsl-code-search.mdсемантический поиск по телу кода BSL
docs/bsl-code-search-benchmark.mdбенчмарк режимов поиска по коду BSL
docs/object-summary.mdLLM-сводки объектов и поиск по ним
docs/web-console.mdвеб-консоль
docs/console-agent.mdвстроенный AI агент
docs/extensions.mdрасширения 1С

Полный перечень переменных окружения с дефолтами и комментариями — в .env.example.

Changelog

Последние изменения — v2.0.1 (2026-08-19): исправлено неполное удаление данных расширения из графа, ускорен поиск инструментов по коду BSL, устранено зависание индексации на очень длинных строках.

Полная история версий — в CHANGELOG.md.

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。