The configuration as argument
The tool contract, where three of the four failures become missing parameters
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.