TransformerBee.MCP
TransformerBee.MCP is a Model Context Protocol (MCP) server that enables bidirectional conversion between EDIFACT messages and BO4E (Business Object for Energy) data structures used in the German energy market.
Convert EDIFACT to BO4E (
convert_edifact_to_bo4e): Takes an EDIFACT message string and returns its BO4E equivalent as a JSON object.Convert BO4E to EDIFACT (
convert_bo4e_to_edifact): Takes a BO4EBOneyCombtransaction object (containingstammdatenandtransaktionsdaten) and returns the corresponding EDIFACT string.
Both tools accept an optional edifact_format_version parameter (e.g., FV2104 through FV2610) to specify which AHB validity period/specification version to use during conversion.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TransformerBee.MCPconvert this EDIFACT message to BO4E format"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TransformerBee.MCP
This is a simple PoC of a Model Context Protocol (MCP) server for transformer.bee, written in Python.
Under the hood it uses python-mcp and transformerbeeclient.py.
Installation
You can install the MCP server as Python package or pull the Docker image.
Install as Python Package
uv install transformerbeemcpor if you are using pip:
pip install transformerbeemcpInstall as Docker Image
docker pull ghcr.io/hochfrequenz/transformerbee.mcp:latestRelated MCP server: vnbdigital-mcp
Start the Server via CLI
Python
_The package ships a simple CLI argument to start the server.
In a terminal inside the virtual environment in which you installed the package (here myvenv), call:
(myvenv) run-transformerbee-mcp-serverDocker
docker run --network host -i --rm -e TRANSFORMERBEE_HOST=http://localhost:5021 ghcr.io/hochfrequenz/transformerbee.mcp:latest(For the environment variables -e ..., see below or the transformerbeeclient.py docs.)
Register MCP Server in Claude Desktop
If you checked out this repository
cd path/to/reporoot/src/transformerbeemcp
fastmcp install server.pyIf you installed the package via pip/uv
Modify your claude_desktop_config.json (that can be found in Claude Desktop menu via "Datei > Einstellungen > Entwickler > Konfiguration bearbeiten"):
{
"mcpServers": {
"TransformerBee.mcp": {
"command": "C:\\github\\MyProject\\.myvenv\\Scripts\\run-transformerbee-mcp-server.exe",
"args": [],
"env": {
"TRANSFORMERBEE_HOST": "http://localhost:5021",
"TRANSFORMERBEE_CLIENT_ID": "",
"TRANSFORMERBEE_CLIENT_SECRET": ""
}
}
}
}where C:\github\MyProject\.myvenv is the path to your virtual environment where you installed the package and localhost:5021 exposes transformer.bee running in a docker container.
Alternatively, if you haven't configured this handy CLI command
https://github.com/Hochfrequenz/TransformerBee.mcp/blob/c0898769670469df13f23b57a55fe4b71ed9795b/pyproject.toml#L101-L102
you can just call python with non-empty args.
Note that a lot of MCP tooling assumes you have uv installed, so you might need to install it in your virtual environment as well.
For details about the environment variables and/or starting transformer.bee locally, check transformerbeeclient.py docs.
If you installed the package via Docker
{
"mcpServers": {
"TransformerBee.mcp": {
"command": "docker",
"args": [
"run",
"--network",
"host",
"-i",
"--rm",
"-e",
"TRANSFORMERBEE_HOST=http://localhost:5021",
"ghcr.io/hochfrequenz/transformerbee.mcp:latest"
],
"env": {
"TRANSFORMERBEE_HOST": "http://localhost:5021",
"TRANSFORMERBEE_CLIENT_ID": "",
"TRANSFORMERBEE_CLIENT_SECRET": ""
}
}
}
}I'm aware, that using the --network host option is a bit hacky and not best practice.
Available Tools
2 toolsconvert_bo4e_to_edifactB
Convert a BO4E transaktion to its EDIFACT equivalent
| Name | Required | Description | Default |
|---|---|---|---|
| transaktion | Yes | BOneyComb is a data structure that represents a "transaction" in the marktkommunikation. 1 transaction is 1 "Geschäftsvorfall". | |
| edifact_format_version | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the conversion action without mentioning any side effects, error conditions, permissions, or whether the operation is read-only. Given the tool name, it's likely non-destructive, but this is not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no redundant words. It is front-loaded with the essential action and object, making it easy for an agent to quickly understand the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and a sibling tool, the description provides the basic purpose. However, it lacks details about conversion behavior, error handling, or prerequisites (e.g., network access). With no annotations, more context would be beneficial for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 50%, meaning half of the parameters lack descriptions in the schema. The description does not mention any parameters or add meaning beyond the schema. It fails to compensate for the undocumented parameters or clarify their usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 'Convert' and the resources 'BO4E transaktion' to 'EDIFACT equivalent'. It effectively distinguishes from the sibling tool 'convert_edifact_to_bo4e', which performs the reverse conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. The sibling tool implies that this is for BO4E-to-EDIFACT conversion, but no guidance on prerequisites, edge cases, or when not to use is provided. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_edifact_to_bo4eC
Convert an EDIFACT message to its BO4E equivalent
| Name | Required | Description | Default |
|---|---|---|---|
| edifact | Yes | ||
| edifact_format_version | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| stammdaten | Yes | |
| transaktionsdaten | Yes | |
| links | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description alone must disclose behavioral traits. It only says 'convert', omitting any side effects, idempotency, error handling, authentication needs, or other critical behaviors. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loading the verb and resource. While efficient, it could include more useful context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description fails to explain the conversion process, BO4E context, or how to handle the version parameter. The tool is incomplete for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds no meaning beyond the schema for either parameter. The edifact_format_version parameter has an enum with no explanation of how to choose the version, and edifact has no description at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (convert), input (EDIFACT message), and output (BO4E equivalent). It effectively distinguishes from the sibling tool convert_bo4e_to_edifact by specifying the direction of conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. the sibling, no prerequisites, context, or exceptions mentioned. The description only states what it does without any usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v0.0.8- Changed
convert_bo4e_to_edifact12 fields changed- removed
Input schema / $defsRemoved value: -{ - "BOneyComb": { - "description": "BOneyComb is a data structure that represents a \"transaction\" in the marktkommunikation.\n1 transaction is 1 \"Geschäftsvorfall\".", - "properties": { - "links": { - "anyOf": [ - { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Links" - }, - "stammdaten": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "title": "Stammdaten", - "type": "array" - }, - "transaktionsdaten": { - "additionalProperties": { - "type": "string" - }, - "title": "Transaktionsdaten", - "type": "object" - } - }, - "required": [ - "stammdaten", - "transaktionsdaten" - ], - "title": "BOneyComb", - "type": "object" - }, - "EdifactFormatVersion": { - "description": "One format version refers to the period in which an AHB is valid.", - "enum": [ - "FV2104", - "FV2110", - "FV2210", - "FV2304", - "FV2310", - "FV2404", - "FV2410", - "FV2504", - "FV2510", - "FV2604", - "FV2610" - ], - "title": "EdifactFormatVersion", - "type": "string" - } -} - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / edifact_format_version / anyOfPrevious value: -[ - { - "$ref": "#/$defs/EdifactFormatVersion" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "One format version refers to the period in which an AHB is valid.", + "enum": [ + "FV2104", + "FV2110", + "FV2210", + "FV2304", + "FV2310", + "FV2404", + "FV2410", + "FV2504", + "FV2510", + "FV2604", + "FV2610" + ], + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / transaktion / $refRemoved value: -"#/$defs/BOneyComb" - added
Input schema / properties / transaktion / descriptionAdded value: +"BOneyComb is a data structure that represents a \"transaction\" in the marktkommunikation.\n1 transaction is 1 \"Geschäftsvorfall\"." - added
Input schema / properties / transaktion / propertiesAdded value: +{ + "links": { + "anyOf": [ + { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "stammdaten": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "transaktionsdaten": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } +} - added
Input schema / properties / transaktion / requiredAdded value: +[ + "stammdaten", + "transaktionsdaten" +] - added
Input schema / properties / transaktion / typeAdded value: +"object" - removed
Input schema / titleRemoved value: -"convert_bo4e_to_edifactArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"convert_bo4e_to_edifactOutput" - added
Output schema / x-fastmcp-wrap-resultAdded value: +true
- Changed
convert_edifact_to_bo4e10 fields changed- removed
Input schema / $defsRemoved value: -{ - "EdifactFormatVersion": { - "description": "One format version refers to the period in which an AHB is valid.", - "enum": [ - "FV2104", - "FV2110", - "FV2210", - "FV2304", - "FV2310", - "FV2404", - "FV2410", - "FV2504", - "FV2510", - "FV2604", - "FV2610" - ], - "title": "EdifactFormatVersion", - "type": "string" - } -} - added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / edifact / titleRemoved value: -"Edifact" - changed
Input schema / properties / edifact_format_version / anyOfPrevious value: -[ - { - "$ref": "#/$defs/EdifactFormatVersion" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "One format version refers to the period in which an AHB is valid.", + "enum": [ + "FV2104", + "FV2110", + "FV2210", + "FV2304", + "FV2310", + "FV2404", + "FV2410", + "FV2504", + "FV2510", + "FV2604", + "FV2610" + ], + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / titleRemoved value: -"convert_edifact_to_bo4eArguments" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / descriptionAdded value: +"BOneyComb is a data structure that represents a \"transaction\" in the marktkommunikation.\n1 transaction is 1 \"Geschäftsvorfall\"." - added
Output schema / propertiesAdded value: +{ + "links": { + "anyOf": [ + { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "stammdaten": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "transaktionsdaten": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } +} - added
Output schema / requiredAdded value: +[ + "stammdaten", + "transaktionsdaten" +] - removed
Output schema / titleRemoved value: -"convert_edifact_to_bo4eDictOutput"
2 tool updates
v0.0.7- Changed
convert_bo4e_to_edifact1 field changed- changed
Input schema / $defs / EdifactFormatVersion / enumPrevious value: -[ - "FV2104", - "FV2110", - "FV2210", - "FV2304", - "FV2310", - "FV2404", - "FV2410", - "FV2504", - "FV2510", - "FV2604" -]New value: +[ + "FV2104", + "FV2110", + "FV2210", + "FV2304", + "FV2310", + "FV2404", + "FV2410", + "FV2504", + "FV2510", + "FV2604", + "FV2610" +]
- Changed
convert_edifact_to_bo4e1 field changed- changed
Input schema / $defs / EdifactFormatVersion / enumPrevious value: -[ - "FV2104", - "FV2110", - "FV2210", - "FV2304", - "FV2310", - "FV2404", - "FV2410", - "FV2504", - "FV2510", - "FV2604" -]New value: +[ + "FV2104", + "FV2110", + "FV2210", + "FV2304", + "FV2310", + "FV2404", + "FV2410", + "FV2504", + "FV2510", + "FV2604", + "FV2610" +]
2 tool updates
- First observed
convert_bo4e_to_edifact - First observed
convert_edifact_to_bo4e
TDQS
The two tools serve opposite directions (BO4E to EDIFACT and vice versa), so there is no ambiguity. An agent can select the correct one based on the desired conversion direction.
Both tools follow the exact same naming pattern: 'convert_<source>_to_<target>', which is clear and consistent.
Two tools are perfectly appropriate for a focused bidirectional converter. The scope is narrow and complete, with no need for additional tools.
The tool set covers the full conversion cycle: both directions are implemented, so there are no gaps for this domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Convert Revit files to XKT, IFC, or DWG and query BIM data via natural language.
Validate, generate & convert EU e-invoices (UBL, CII, XRechnung, Factur-X) — EN 16931 pre-validated.
German e-invoicing: generate XRechnung 3.0, pre-check and extract (incl. ZUGFeRD PDF). Paid.
Validate, extract, repair and generate French Factur-X / EN16931 invoices via AgentForge API
Related MCP Servers
- AlicenseNot gradedqualityAmaintenance87+ specialized tools for German and European energy data. Direct AI access to Marktstammdatenregister (MaStR), ENTSO-E, Redispatch 2.0, and Grid Operations for utilities and datacenters.2GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables querying German distribution grid operator data from vnbdigital.de and BDEW register, including lookup by ID, postcode, coordinates, and free-text search.MIT
- AlicenseBqualityBmaintenanceEnables natural language management of BOQ/Tendix project data, including hierarchy, pricing, and contractor handling via the BOQ REST API.19MIT
- FlicenseBqualityCmaintenanceEnables managing SAP Cloud Integration iFlows, packages, configurations, deployments, and runtime artifacts via natural language through the OData API.25-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hochfrequenz/TransformerBee.mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server