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
Medium risk
We rate an entry medium when the tool runs code, makes network calls or reads project files. Check what exactly it does before installing.
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
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.
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 procedureLimitations
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.
MCP
- Transport
- http
- Authentication
- API key
| 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. |
Security check
- 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
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.
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.
Related
A skills library that gives coding agents a development process: brainstorming, planning, TDD, subagents and code review
Skills for real engineers by Matt Pocock
Skills For Real Engineers
Small composable skills for engineering with agents: plan grilling, TDD, bug diagnosis, code review and architecture
GitHub toolkit for spec-driven development: the specify CLI adds agent commands and skills to a project, from principles to implementation
Reference MCP servers
Model Context Protocol servers
Official reference MCP servers: Filesystem, Fetch, Git, Memory, Sequential Thinking, Time and Everything