← Back to Catalog

Bill Of Materials Integrity

ID: F282 | Version: 0.1.0

Tool: bill_of_materials_integrity

Pure, bounded analysis of an explicit bill-of-materials graph: validates structure, finds missing references, duplicate IDs, duplicate edges, and cycles (whole graph, even parts unreachable from the root), and - when the graph is completely clean - exactly explodes root quantity through every assembly level with exact-decimal arithmetic, aggregating shared components reached via different branches. No network access and no manufacturing/supplier certification: this checks the data you supply, not the real world.

Pricing

0.05 per analysis

Requires x402 capable MCP client with wallet for payment settlement.

Input Schema

{
  "type": "object",
  "required": [
    "root",
    "quantity",
    "parts"
  ],
  "additionalProperties": false,
  "properties": {
    "root": {
      "type": "string",
      "description": "ID of the part to explode from. Must match one of parts[].id.",
      "minLength": 1,
      "maxLength": 128
    },
    "quantity": {
      "type": "string",
      "description": "Positive exact decimal, <=12 integer digits, <=6 fraction digits.",
      "pattern": "^(?!0+(?:\\.0{1,6})?$)\\d{1,12}(\\.\\d{1,6})?$"
    },
    "parts": {
      "type": "array",
      "maxItems": 500,
      "items": {
        "type": "object",
        "required": [
          "id",
          "unit"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "unit": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64
          },
          "components": {
            "type": "array",
            "maxItems": 100,
            "items": {
              "type": "object",
              "required": [
                "part_id",
                "quantity"
              ],
              "additionalProperties": false,
              "properties": {
                "part_id": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 128
                },
                "quantity": {
                  "type": "string",
                  "pattern": "^(?!0+(?:\\.0{1,6})?$)\\d{1,12}(\\.\\d{1,6})?$"
                }
              }
            }
          }
        }
      }
    }
  }
}

Example Input

{
  "root": "bike",
  "quantity": "2",
  "parts": [
    {
      "id": "bike",
      "unit": "each",
      "components": [
        {
          "part_id": "wheel",
          "quantity": "2"
        },
        {
          "part_id": "frame",
          "quantity": "1"
        }
      ]
    },
    {
      "id": "wheel",
      "unit": "each",
      "components": [
        {
          "part_id": "spoke",
          "quantity": "16"
        },
        {
          "part_id": "tire",
          "quantity": "1"
        },
        {
          "part_id": "bolt",
          "quantity": "2"
        }
      ]
    },
    {
      "id": "frame",
      "unit": "each",
      "components": [
        {
          "part_id": "bolt",
          "quantity": "4"
        }
      ]
    },
    {
      "id": "spoke",
      "unit": "each"
    },
    {
      "id": "tire",
      "unit": "each"
    },
    {
      "id": "bolt",
      "unit": "each"
    }
  ]
}

Example Output

{
  "ok": true,
  "issues": [],
  "summary": {
    "parts": 6,
    "assemblies": 3,
    "leaves": 3,
    "issues": 0,
    "reachable_parts": 6
  },
  "explosion": [
    {
      "part_id": "bike",
      "unit": "each",
      "quantity": "2"
    },
    {
      "part_id": "wheel",
      "unit": "each",
      "quantity": "4"
    },
    {
      "part_id": "frame",
      "unit": "each",
      "quantity": "2"
    },
    {
      "part_id": "spoke",
      "unit": "each",
      "quantity": "64"
    },
    {
      "part_id": "tire",
      "unit": "each",
      "quantity": "4"
    },
    {
      "part_id": "bolt",
      "unit": "each",
      "quantity": "16"
    }
  ],
  "scope": "supplied_bom_only"
}

Limitations

Connect via MCP

Add to your MCP client configuration:

{
  "mcpServers": {
    "bill-of-materials-integrity": {
      "type": "http",
      "url": "https://mcp-factory.bowling-anthony.workers.dev/bill-of-materials-integrity/mcp"
    }
  }
}

Payment

Price: 0.05 USDC per analysis

This tool requires an x402-capable MCP client with wallet support. Tool listing and initialization are free. Actual completed job analysis is paid in USDC on the Base network.

Payment flow:

  1. Client discovers the price, then submits a signed x402 v2 PAYMENT-SIGNATURE authorization with the input
  2. If settlement is pending, retry the identical input and authorization; do not sign another charge.
  3. Results retained for 24 hours for recovery
  4. Maximum output size: 96 KiB