The configuration as argument
This is the definition the comparison server publishes over MCP. The required list is the design: a call without a configuration, a plant or a date is rejected before either system is touched, and the fourth failure, identity, is handled by who is allowed to call it.
# compare_ebom_mbom: MCP tool definition on the comparison server.
# Every input is required. None has a default, on purpose.
{
"name": "compare_ebom_mbom",
"description": "Compare the engineering BOM of one part in the PLM with the SAP material BOM of one plant, both resolved for one date. Read-only.",
"inputSchema": {
"type": "object",
"required": ["part_number", "plm_config", "plant", "effective_date"],
"properties": {
"part_number": { "type": "string" },
"plm_config": { "type": "string", "description": "Named revision rule or config spec the plant builds to" },
"plant": { "type": "string", "description": "SAP plant; one mBOM per plant" },
"effective_date": { "type": "string", "format": "date" }
}
}
}
# The result echoes what was actually used, so it can be checked later:
# { "plm_config_used": "...", "sap_valid_from": "...",
# "differences": [ { "item": "...", "class": "explained | unexplained | change_in_flight", "reason": "..." } ] }
If a result does not echo plm_config_used and sap_valid_from, nobody can check it afterwards, and an unexplained difference becomes an opinion.