1C configuration graph MCP server

1C Configuration MCP Server

An MCP server builds a metadata and call graph from a 1C configuration's XML and BSL export, with optional semantic search via an external embedder and Qdrant

  • 4 ★ on the repository
  • Last commit
  • MIT
MCP server

Extended access

Why this level

  • With semantic search enabled, configuration code and metadata are sent to an external embedder and reranker
  • The HTTP endpoint listens on 0.0.0.0 by default and is unauthenticated without auth_token
All reasons and checks
Russian stack

axel-avb/mcp-1c-metadata

Install

Manual install

git clone --recurse-submodules https://github.com/axel-avb/mcp-1c-metadata.git
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Install including the legacy-form parser submodule.

Access and checks

How we review

Extended accessThe tool runs code or makes network calls and only reads external data.

  • With semantic search enabled, configuration code and metadata are sent to an external embedder and reranker
  • The HTTP endpoint listens on 0.0.0.0 by default and is unauthenticated without auth_token

This is third-party code. Review the repository files before installing.

What it does

The server parses a standard 1C configuration source-code export, XML object metadata and BSL modules, and builds a SQLite graph linking object-to-element, module-to-symbol, calls and cross-references. Twenty-three tools give a configuration inventory, an object's structure by section, search over objects and elements by description, a procedure call graph with BFS to a set depth, and a routine's body with pagination. Semantic search via search_config and search_bsl_code is optional: without an external OpenAI-compatible embedder and Qdrant, all structural tools still work off the plain SQLite graph, and the reranker is also optional, degrading gracefully to plain ANN search order. Legacy ordinary-type forms are separately supported: BSL from Form.bin is extracted with a vendored binary parser.

Who it is for. For 1C developers with large configurations who need a call graph and structural search over objects and BSL code, with an optional semantic layer.

Good fit when

  • You need a procedure call graph with depth-limited traversal, not just text search
  • You need a structural overview of an object: attributes, tabular sections, forms, commands in one call
  • You have a local embedder like Ollama and want semantic search over metadata and code

Not a fit when

  • There's no configuration export to source code, only a file-based or server infobase
  • The configuration is large and there's nowhere to run Qdrant: the README explicitly warns about tens of gigabytes of RAM for ERP 2.x
  • You need strict grammatical BSL validation: the parser is string-based and doesn't resolve conditional compilation

Example request

Find where the item price is stored in the configuration, and show who calls the sales-total calculation procedure

MCP

Transport
http
Authentication
key is optional

Environment variables

ONEC_CONFIG_ROOT required
Root of the exported 1C configuration sources.
ONEC_EMBEDDER_BASE_URL
Base URL of an OpenAI-compatible embedder for semantic search, e.g. a local Ollama.
ONEC_AUTH_TOKEN secret
Bearer auth token for the HTTP endpoint; empty means authentication is off.

Limitations

The BSL parser is string-based rather than grammatical, sufficient for the call graph and search but not for strict code validation. Conditional compilation directives (#If/#Else) are not resolved, which can produce a duplicate symbol count. Calls are resolved by name within 1C's global namespace, so identically named procedures in different modules get CALLS edges to all candidates. Semantic search needs an external OpenAI-compatible embedder and Qdrant; without them only the structural part works. The embedder's vector dimension must exactly match the configured value, or Qdrant rejects the write. Python 3.11 or newer is required.

How to disable. Stop the python -m src.server process and remove the server from your MCP client configuration.

FAQ

Does the server work without Qdrant and an embedder?

Yes, all structural tools (list_objects, get_symbol, get_callers/callees, get_references, graph_stats) work off the SQLite graph with no external services; only the search_config semantic search is unavailable.

How is the index updated after a configuration change?

python -m src.indexer is incremental by default and re-embeds only changed nodes; a --full flag triggers a full rebuild.

Discussion

No questions or reviews yet.

Russian stack

An MCP server and portable admin tool for analyzing an exported 1C XML configuration: object listing, metadata structure, code search

MCP serverExtended access2Repository stars
Russian stack

A single dependency-free Rust binary with no network calls: indexes a 1C configuration export and answers call-graph and metadata questions in milliseconds

MCP serverExtended access15Repository stars
Russian stack

An MCP server for Claude Code: full-text search over multiple 1C XML+BSL configuration exports in a local SQLite FTS5 database

MCP serverExtended access
Russian stack

A local MCP server for semantic search over an exported 1C configuration, with a choice of embedding model and vector database

MCP serverExtended access11Repository stars
Russian stack

A Dockerized MCP server for searching 1C dumps: structural index, call graph and semantic code search

MCP serverExtended access79Repository stars

README in short

The README describes the XML and BSL parser's capabilities, the SQLite graph, optional semantic search via an embedder, Qdrant and a reranker with a degradation table for each missing component, the submodule-based install, environment-variable configuration priority, the expected configuration export format, indexing commands with various flags, a full list of twenty-three tools by group, token cost for initializing the tool schema, connecting to Claude Desktop and Claude Code, running via Docker Compose, and a detailed limitations section covering unresolved conditional compilation and RAM requirements for large configurations.

README badge

Report a problem