← WebMCP Directory

Tool tree

rigbuilder.andreas-adner.workers.dev

CommerceTools verified
Website
RigBuilder
Explore capabilities
    get_build_stateAnswer

    Full state of the PC build on this page: each slot (cpu, motherboard, ram, gpu, cooler, case, psu, storage; ram and storage may hold several) with part id, name, price, verified flag and key specs; total, estimated watts, PSU headroom, every compatibility conflict, the build goal, active render and catalogVersion. Part ids look like cpu-r7-9800x3d. The human can edit the build at any time; call this to re-sync. Every response also carries buildRevision and a digest.

    View tool JSON
    {
      "name": "get_build_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Full state of the PC build on this page: each slot (cpu, motherboard, ram, gpu, cooler, case, psu, storage; ram and storage may hold several) with part id, name, price, verified flag and key specs; total, estimated watts, PSU headroom, every compatibility conflict, the build goal, active render and catalogVersion. Part ids look like cpu-r7-9800x3d. The human can edit the build at any time; call this to re-sync. Every response also carries buildRevision and a digest.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    search_partsAnswer

    Search the catalog for one category (cpu, motherboard, ram, gpu, cooler, case, psu, storage). Returns parts with id (e.g. gpu-rtx-5070ti), price, verified and up to 5 key specs plus fit against the current build: compatible, conditional (rules that need an empty slot are listed in pending) or incompatible. By default incompatible parts are hidden once the build is non-empty. Paginated: total, limit, offset.

    View tool JSON
    {
      "name": "search_parts",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search the catalog for one category (cpu, motherboard, ram, gpu, cooler, case, psu, storage). Returns parts with id (e.g. gpu-rtx-5070ti), price, verified and up to 5 key specs plus fit against the current build: compatible, conditional (rules that need an empty slot are listed in pending) or incompatible. By default incompatible parts are hidden once the build is non-empty. Paginated: total, limit, offset.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "cpu",
              "motherboard",
              "ram",
              "gpu",
              "cooler",
              "case",
              "psu",
              "storage"
            ],
            "description": "Part category to search."
          },
          "query": {
            "type": "string",
            "description": "Optional free-text match on name or brand (case-insensitive substring).",
            "maxLength": 80
          },
          "minPrice": {
            "type": "number",
            "description": "Optional minimum price in USD.",
            "minimum": 0
          },
          "maxPrice": {
            "type": "number",
            "description": "Optional maximum price in USD.",
            "minimum": 0
          },
          "filters": {
            "type": "object",
            "description": "Optional typed spec filters, e.g. {socket:'AM5'}, {ddrGen:5}, {formFactor:'ITX'}, {minVramGB:16}, {maxLengthMm:300}, {type:'aio'}, {minWattage:750}.",
            "additionalProperties": true
          },
          "compatibleWithCurrentBuild": {
            "type": "boolean",
            "description": "Default true when the build is non-empty: hide incompatible parts. Set false to see everything with fit reasons."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "price",
              "performance",
              "name"
            ],
            "description": "Sort order; default price ascending. performance = utility for the goal workload, descending."
          },
          "limit": {
            "type": "integer",
            "description": "Results per page, default 6, max 20.",
            "minimum": 1,
            "maximum": 20
          },
          "offset": {
            "type": "integer",
            "description": "Pagination offset, default 0.",
            "minimum": 0
          }
        },
        "required": [
          "category"
        ],
        "additionalProperties": false
      }
    }
    get_part_detailsAnswer

    Full spec sheet for one part id: every stored field for its category (sizes in mm, power in W, clocks in MHz, capacity in GB), performance tiers 1-10 for CPU/GPU, noise tier, verified flag and source URL when verified, same-origin thumbnail URL, and whether it is in the current build.

    View tool JSON
    {
      "name": "get_part_details",
      "kind": "answer",
      "impl": "imperative",
      "description": "Full spec sheet for one part id: every stored field for its category (sizes in mm, power in W, clocks in MHz, capacity in GB), performance tiers 1-10 for CPU/GPU, noise tier, verified flag and source URL when verified, same-origin thumbnail URL, and whether it is in the current build.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "partId": {
            "type": "string",
            "description": "Part id, e.g. cpu-r7-9800x3d.",
            "maxLength": 80
          }
        },
        "required": [
          "partId"
        ],
        "additionalProperties": false
      }
    }
    validate_buildAction

    Run the compatibility solver on the current build, or on a copy with hypothetical ops applied in order (nothing is mutated). Returns every conflict with code, severity (error/warning/info), partIds and a one-line explanation, plus estimated watts and PSU headroom. Use it to test a plan before writing. An add on an occupied single slot fails with SLOT_OCCUPIED unless the op is replace.

    View tool JSON
    {
      "name": "validate_build",
      "kind": "act",
      "impl": "imperative",
      "description": "Run the compatibility solver on the current build, or on a copy with hypothetical ops applied in order (nothing is mutated). Returns every conflict with code, severity (error/warning/info), partIds and a one-line explanation, plus estimated watts and PSU headroom. Use it to test a plan before writing. An add on an occupied single slot fails with SLOT_OCCUPIED unless the op is replace.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "hypothetical": {
            "type": "array",
            "description": "Optional ops to apply to a copy first, in order.",
            "maxItems": 16,
            "items": {
              "type": "object",
              "properties": {
                "op": {
                  "type": "string",
                  "enum": [
                    "add",
                    "replace",
                    "remove"
                  ],
                  "description": "add = place in an empty slot; replace = swap the slot (or replacesPartId); remove = take out."
                },
                "partId": {
                  "type": "string",
                  "description": "Part id the op refers to.",
                  "maxLength": 80
                },
                "replacesPartId": {
                  "type": "string",
                  "description": "For replace in ram/storage: the specific part to swap out.",
                  "maxLength": 80
                }
              },
              "required": [
                "op",
                "partId"
              ],
              "additionalProperties": false
            }
          }
        },
        "additionalProperties": false
      }
    }
    explain_compatibilityAnswer

    Explain how one catalog part would fit the current build, rule by rule: each relevant rule reports pass, fail, not_applicable or unknown with a reason such as 'GPU is 358 mm, case max 330 mm' or 'no case selected yet - length unchecked'. Also returns the overall fit (compatible / conditional / incompatible) and the pending rule codes. Read-only; the part is not added.

    View tool JSON
    {
      "name": "explain_compatibility",
      "kind": "answer",
      "impl": "imperative",
      "description": "Explain how one catalog part would fit the current build, rule by rule: each relevant rule reports pass, fail, not_applicable or unknown with a reason such as 'GPU is 358 mm, case max 330 mm' or 'no case selected yet - length unchecked'. Also returns the overall fit (compatible / conditional / incompatible) and the pending rule codes. Read-only; the part is not added.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "partId": {
            "type": "string",
            "description": "Part id to evaluate against the current build.",
            "maxLength": 80
          }
        },
        "required": [
          "partId"
        ],
        "additionalProperties": false
      }
    }
    estimate_performanceAction

    Editorial performance estimate for the current build and a workload: CPU and GPU tiers (1-10), the bottleneck (lowest tier), overall tier, a balance note and PSU load (estimated watts, PSU wattage, headroom %). Tiers are curated review consensus, not benchmarks. Resolution applies to gaming only (default 1440p).

    View tool JSON
    {
      "name": "estimate_performance",
      "kind": "act",
      "impl": "imperative",
      "description": "Editorial performance estimate for the current build and a workload: CPU and GPU tiers (1-10), the bottleneck (lowest tier), overall tier, a balance note and PSU load (estimated watts, PSU wattage, headroom %). Tiers are curated review consensus, not benchmarks. Resolution applies to gaming only (default 1440p).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workload": {
            "type": "string",
            "enum": [
              "gaming",
              "streaming",
              "video-editing",
              "3d-rendering",
              "ml",
              "office"
            ],
            "description": "Workload to estimate for."
          },
          "resolution": {
            "type": "string",
            "enum": [
              "1080p",
              "1440p",
              "4k"
            ],
            "description": "Gaming resolution; ignored for other workloads. Default 1440p."
          }
        },
        "required": [
          "workload"
        ],
        "additionalProperties": false
      }
    }
    add_partAction

    Add a catalog part to the build by id. Single-slot categories need replace: true when occupied, else SLOT_OCCUPIED. ram and storage hold several parts: pass replacesPartId to swap a specific one, otherwise the part is appended. Returns the new buildRevision, digest and validation delta (conflict codes added/removed). The human sees the change immediately and can undo it. If the human may have changed the build, call get_build_state first; on STALE_REVISION, re-read and re-plan.

    View tool JSON
    {
      "name": "add_part",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a catalog part to the build by id. Single-slot categories need replace: true when occupied, else SLOT_OCCUPIED. ram and storage hold several parts: pass replacesPartId to swap a specific one, otherwise the part is appended. Returns the new buildRevision, digest and validation delta (conflict codes added/removed). The human sees the change immediately and can undo it. If the human may have changed the build, call get_build_state first; on STALE_REVISION, re-read and re-plan.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "partId": {
            "type": "string",
            "description": "Part id to add, e.g. gpu-rtx-5070ti.",
            "maxLength": 80
          },
          "replace": {
            "type": "boolean",
            "description": "Single-slot categories: replace the part currently in the slot."
          },
          "replacesPartId": {
            "type": "string",
            "description": "ram/storage: id of the part in the build to swap out.",
            "maxLength": 80
          },
          "expectedRevision": {
            "type": "integer",
            "description": "Optional. buildRevision you last saw; the write fails with STALE_REVISION if the build changed since. Defaults to the last revision returned to you.",
            "minimum": 0
          }
        },
        "required": [
          "partId"
        ],
        "additionalProperties": false
      }
    }
    remove_partAction

    Remove from the build either one part by partId, or an entire category (for ram/storage this removes ALL parts in that slot). Exactly one of partId or category is required. Returns the new buildRevision, the digest and the validation delta. If the human may have changed the build, call get_build_state first; on STALE_REVISION, re-read and re-plan.

    View tool JSON
    {
      "name": "remove_part",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove from the build either one part by partId, or an entire category (for ram/storage this removes ALL parts in that slot). Exactly one of partId or category is required. Returns the new buildRevision, the digest and the validation delta. If the human may have changed the build, call get_build_state first; on STALE_REVISION, re-read and re-plan.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "partId": {
            "type": "string",
            "description": "Id of a part currently in the build.",
            "maxLength": 80
          },
          "category": {
            "type": "string",
            "enum": [
              "cpu",
              "motherboard",
              "ram",
              "gpu",
              "cooler",
              "case",
              "psu",
              "storage"
            ],
            "description": "Clear this whole slot (all parts for ram/storage)."
          },
          "expectedRevision": {
            "type": "integer",
            "description": "Optional. buildRevision you last saw; the write fails with STALE_REVISION if the build changed since. Defaults to the last revision returned to you.",
            "minimum": 0
          }
        },
        "additionalProperties": false
      }
    }
    set_build_goalAction

    Set the build goal: use case, budget in USD and optional preferences (enums only). The solver then also reports OVER_BUDGET, missing slots for the use case, tier imbalance, and noise/size preference mismatches; alternatives and fit_to_budget rank by the goal workload. The goal is part of build state, so this bumps buildRevision. If the human may have changed the build, call get_build_state first; on STALE_REVISION, re-read and re-plan.

    View tool JSON
    {
      "name": "set_build_goal",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the build goal: use case, budget in USD and optional preferences (enums only). The solver then also reports OVER_BUDGET, missing slots for the use case, tier imbalance, and noise/size preference mismatches; alternatives and fit_to_budget rank by the goal workload. The goal is part of build state, so this bumps buildRevision. If the human may have changed the build, call get_build_state first; on STALE_REVISION, re-read and re-plan.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "useCase": {
            "type": "string",
            "enum": [
              "gaming",
              "streaming",
              "video-editing",
              "3d-rendering",
              "ml",
              "office"
            ],
            "description": "Primary workload."
          },
          "budgetUSD": {
            "type": "number",
            "description": "Total budget in USD for the parts in the build.",
            "minimum": 1,
            "maximum": 100000
          },
          "preferences": {
            "type": "object",
            "description": "Optional preferences; every field is an enum.",
            "properties": {
              "noise": {
                "type": "string",
                "enum": [
                  "quiet",
                  "standard"
                ],
                "description": "quiet flags loud parts (noise tier >= 4)."
              },
              "size": {
                "type": "string",
                "enum": [
                  "compact",
                  "standard",
                  "any"
                ],
                "description": "compact flags cases over 25 L."
              },
              "lighting": {
                "type": "string",
                "enum": [
                  "rgb",
                  "none",
                  "any"
                ],
                "description": "Lighting preference; affects the render prompt."
              },
              "color": {
                "type": "string",
                "enum": [
                  "black",
                  "white",
                  "any"
                ],
                "description": "Case colour preference."
              }
            },
            "additionalProperties": false
          },
          "expectedRevision": {
            "type": "integer",
            "description": "Optional. buildRevision you last saw; the write fails with STALE_REVISION if the build changed since. Defaults to the last revision returned to you.",
            "minimum": 0
          }
        },
        "required": [
          "useCase",
          "budgetUSD"
        ],
        "additionalProperties": false
      }
    }
    reset_buildAction

    Clear every slot and the goal, giving an empty build and a new buildRevision. Requires confirm: true. The human can undo this from the activity feed. If the human may have changed the build, call get_build_state first; on STALE_REVISION, re-read and re-plan.

    View tool JSON
    {
      "name": "reset_build",
      "kind": "act",
      "impl": "imperative",
      "description": "Clear every slot and the goal, giving an empty build and a new buildRevision. Requires confirm: true. The human can undo this from the activity feed. If the human may have changed the build, call get_build_state first; on STALE_REVISION, re-read and re-plan.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "confirm": {
            "type": "boolean",
            "description": "Must be true to reset."
          },
          "expectedRevision": {
            "type": "integer",
            "description": "Optional. buildRevision you last saw; the write fails with STALE_REVISION if the build changed since. Defaults to the last revision returned to you.",
            "minimum": 0
          }
        },
        "required": [
          "confirm"
        ],
        "additionalProperties": false
      }
    }
    render_buildAction

    Render the current build (needs a case) and show it on the page. Put every requested visual customization in flair in this same call; do not use a separate image-generation or image-editing workflow. Cold renders take 10-40 s; cache hits are free. On VERIFICATION_REQUIRED, ask the human to click Verify, then retry. Returns an artifact with imageUrl; resolve it against the page origin to download or embed it in a build-list or other document. Does not change buildRevision.

    View tool JSON
    {
      "name": "render_build",
      "kind": "act",
      "impl": "imperative",
      "description": "Render the current build (needs a case) and show it on the page. Put every requested visual customization in flair in this same call; do not use a separate image-generation or image-editing workflow. Cold renders take 10-40 s; cache hits are free. On VERIFICATION_REQUIRED, ask the human to click Verify, then retry. Returns an artifact with imageUrl; resolve it against the page origin to download or embed it in a build-list or other document. Does not change buildRevision.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "style": {
            "type": "string",
            "enum": [
              "photoreal",
              "cutaway",
              "studio"
            ],
            "description": "Visual style; default photoreal."
          },
          "angle": {
            "type": "string",
            "enum": [
              "front",
              "three-quarter",
              "side"
            ],
            "description": "Camera angle; default three-quarter."
          },
          "flair": {
            "type": "string",
            "description": "All requested cosmetic direction: subject, count, placement and colors. The tool applies it while preserving the selected hardware.",
            "maxLength": 200
          }
        },
        "additionalProperties": false
      }
    }
    suggest_alternativesAction

    Rank swap candidates for one slot such that the swap adds no new errors and does not worsen existing conflicts. Each candidate has price delta, spec delta, validation delta, verified and a tradeoff sentence. direction: cheaper or better (all), quieter (cooler, gpu, psu, case), smaller (case, cooler, motherboard, psu); omitted = closest price at utility >= current. Inapplicable -> DIRECTION_NOT_APPLICABLE with the applicable list. Works for empty slots. Proposes only; apply with add_part.

    View tool JSON
    {
      "name": "suggest_alternatives",
      "kind": "act",
      "impl": "imperative",
      "description": "Rank swap candidates for one slot such that the swap adds no new errors and does not worsen existing conflicts. Each candidate has price delta, spec delta, validation delta, verified and a tradeoff sentence. direction: cheaper or better (all), quieter (cooler, gpu, psu, case), smaller (case, cooler, motherboard, psu); omitted = closest price at utility >= current. Inapplicable -> DIRECTION_NOT_APPLICABLE with the applicable list. Works for empty slots. Proposes only; apply with add_part.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "cpu",
              "motherboard",
              "ram",
              "gpu",
              "cooler",
              "case",
              "psu",
              "storage"
            ],
            "description": "Slot to find alternatives for."
          },
          "direction": {
            "type": "string",
            "enum": [
              "cheaper",
              "better",
              "quieter",
              "smaller"
            ],
            "description": "Ranking direction; omit for closest price at equal or better utility."
          },
          "count": {
            "type": "integer",
            "description": "Number of candidates, default 3, max 6.",
            "minimum": 1,
            "maximum": 6
          },
          "currentPartId": {
            "type": "string",
            "description": "ram/storage only: which part in the slot the swap replaces (default: most expensive).",
            "maxLength": 80
          }
        },
        "required": [
          "category"
        ],
        "additionalProperties": false
      }
    }
    fit_to_budgetAction

    Bounded search over valid cheaper swaps to bring the build under budgetUSD with the least loss in the preserved metric, fewest swaps, most retained utility. Returns a proposal (proposalId, forBuildRevision, ordered ops with fromPartId/toPartId/savings/tradeoff, new total, validation). Not applied: apply each op with add_part {partId: toPartId, replace: true} (replacesPartId: fromPartId for ram/storage); on STALE_REVISION re-run this. Infeasible -> BUDGET_INFEASIBLE with cheapestTotal, blockedBy.

    View tool JSON
    {
      "name": "fit_to_budget",
      "kind": "act",
      "impl": "imperative",
      "description": "Bounded search over valid cheaper swaps to bring the build under budgetUSD with the least loss in the preserved metric, fewest swaps, most retained utility. Returns a proposal (proposalId, forBuildRevision, ordered ops with fromPartId/toPartId/savings/tradeoff, new total, validation). Not applied: apply each op with add_part {partId: toPartId, replace: true} (replacesPartId: fromPartId for ram/storage); on STALE_REVISION re-run this. Infeasible -> BUDGET_INFEASIBLE with cheapestTotal, blockedBy.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "budgetUSD": {
            "type": "number",
            "description": "Target total in USD.",
            "minimum": 1,
            "maximum": 100000
          },
          "protect": {
            "type": "array",
            "description": "Categories that must not change.",
            "items": {
              "type": "string",
              "enum": [
                "cpu",
                "motherboard",
                "ram",
                "gpu",
                "cooler",
                "case",
                "psu",
                "storage"
              ]
            },
            "maxItems": 8
          },
          "preserve": {
            "type": "string",
            "enum": [
              "performance",
              "noise",
              "size"
            ],
            "description": "Metric to preserve; default from the goal (quiet -> noise, compact -> size), else performance."
          }
        },
        "required": [
          "budgetUSD"
        ],
        "additionalProperties": false
      }
    }
    export_buildAction

    Export the current build. markdown: a parts list with prices, total and validation summary. json: {v:1, parts:[ids], goal}. url: a share link /b/<id>#b=<payload> that reloads this exact build (transport 'short+fragment' when the short id was stored, 'fragment' if the backend was unavailable - the link works either way). Read-only.

    View tool JSON
    {
      "name": "export_build",
      "kind": "act",
      "impl": "imperative",
      "description": "Export the current build. markdown: a parts list with prices, total and validation summary. json: {v:1, parts:[ids], goal}. url: a share link /b/<id>#b=<payload> that reloads this exact build (transport 'short+fragment' when the short id was stored, 'fragment' if the backend was unavailable - the link works either way). Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "markdown",
              "json",
              "url"
            ],
            "description": "Output format."
          }
        },
        "required": [
          "format"
        ],
        "additionalProperties": false
      }
    }