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
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
Install
- Works in
- Services
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.txtInstall including the legacy-form parser submodule.
Access and checks
How we reviewExtended 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 procedureMCP
- Transport
- http
- Authentication
- key is optional
Environment variables
ONEC_CONFIG_ROOTrequired- 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_TOKENsecret- 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.
Related
All 1C:Enterprise toolsAn MCP server and portable admin tool for analyzing an exported 1C XML configuration: object listing, metadata structure, code search
Gyrfalcon: 1C code navigation MCP
gyrfalcon
A single dependency-free Rust binary with no network calls: indexes a 1C configuration export and answers call-graph and metadata questions in milliseconds
A stdio MCP server that indexes a 1C structure XML export and code into SQLite and gives an agent search over objects and procedures
An MCP server for Claude Code: full-text search over multiple 1C XML+BSL configuration exports in a local SQLite FTS5 database
A local MCP server for semantic search over an exported 1C configuration, with a choice of embedding model and vector database
A Dockerized MCP server for searching 1C dumps: structural index, call graph and semantic code search
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.