MechanoFab

Manufacturing capability graph for AI agents: materials, processes, tolerances, and instant quotes.

Should I use this

Quality & Safety

A
Description quality
94%
Schema completeness
88%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (6)

  • LOWTool 'check_equipment_capability' description lacks action verbin check_equipment_capability
  • LOWTool 'check_material_environment_compatibility' description lacks action verbin check_material_environment_compatibility
  • LOWTool 'get_industry_requirements' description lacks action verbin get_industry_requirements
  • LOWTool 'get_iso2768_tolerances' description lacks action verbin get_iso2768_tolerances
  • LOWTool 'check_material_environment_compatibility' name length outside 3-30 rangein check_material_environment_compatibility
  • LOWTool 'get_material_process_compatibility' name length outside 3-30 rangein get_material_process_compatibility

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,397Tokens (tool definitions)
~1.2 KBTypical response size
Significant attention impact (2.65% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mechanofab": {
      "url": "https://mcp.mechanofab.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.mechanofab.com/mcpstreamable-http

What it can do

Tool inventory

Tools (20)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒calculate_part_mass(material_id, volume_cm3)

Use when the user provides a part volume and material to calculate mass or weight. Returns mass in grams and kilograms. Example: 'How heavy is a 100cmΒ³ aluminum 6061 part?'

Input Schema

{
  "type": "object",
  "properties": {
    "material_id": {
      "type": "string",
      "description": "Material_ID from the materials dictionary"
    },
    "volume_cm3": {
      "type": "number",
      "minimum": 0.001,
      "description": "Part volume in cubic centimeters"
    }
  },
  "required": [
    "material_id",
    "volume_cm3"
  ],
  "additionalProperties": false
}
🟒check_equipment_capability(model_id, required)

Use when the user asks 'can the Bambu X1C print a 400mm Γ— 400mm Γ— 400mm part?', 'does this machine support 25 micron layer thickness?', 'is this machine capable for this part?'. Returns capable/not-capable with specific gaps.

Input Schema

{
  "type": "object",
  "properties": {
    "model_id": {
      "type": "string"
    },
    "required": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "build_size_mm": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "x": {
              "type": "number"
            },
            "y": {
              "type": "number"
            },
            "z": {
              "type": "number"
            }
          }
        },
        "layer_thickness_micron": {
          "type": "number"
        },
        "material_id": {
          "type": "string"
        }
      }
    }
  },
  "required": [
    "model_id"
  ],
  "additionalProperties": false
}
🟒check_material_environment_compatibility(material_id, environment)

Use when the user describes an operating environment (temperature, humidity, UV, chemicals) and wants to know if a material is suitable. Returns a compatibility rating (excellent/good/fair/poor) and specific risk factors.

Input Schema

{
  "type": "object",
  "properties": {
    "material_id": {
      "type": "string"
    },
    "environment": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "temperature_c": {
          "type": "number"
        },
        "humidity": {
          "type": "string",
          "enum": [
            "low",
            "medium",
            "high"
          ]
        },
        "chemical_exposure": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "uv_exposure": {
          "type": "boolean"
        }
      }
    }
  },
  "required": [
    "material_id",
    "environment"
  ],
  "additionalProperties": false
}
🟒check_service_temperature(material_id, service_temp_c)

Use when the user specifies an operating temperature and asks if a material is suitable (e.g. 'can ABS handle 80Β°C?', 'what is the max temp for 6061 aluminum?'). Returns within_range status, min/max service temps, and safety margin.

Input Schema

{
  "type": "object",
  "properties": {
    "material_id": {
      "type": "string"
    },
    "service_temp_c": {
      "type": "number",
      "description": "Desired operating temperature in Β°C"
    }
  },
  "required": [
    "material_id",
    "service_temp_c"
  ],
  "additionalProperties": false
}
βšͺcompare_equipment(model_ids, compare_on)

Use when the user wants to compare specific machines (e.g. 'compare Formlabs Form 3 vs Stratasys J55', 'which machine has better build volume?'). Accepts 2–4 model IDs and optional metric list.

Input Schema

{
  "type": "object",
  "properties": {
    "model_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "maxItems": 4
    },
    "compare_on": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "build_volume",
          "layer_thickness",
          "speed",
          "materials",
          "tolerance",
          "surface_finish"
        ]
      }
    }
  },
  "required": [
    "model_ids"
  ],
  "additionalProperties": false
}
🟒compare_materials(material_ids, properties)

Use when the user asks to compare materials (e.g. 'AL6061 vs SS304', 'which plastic is stronger'). Returns a structured comparison table grouped by property. Accepts 2–5 material IDs and an optional list of properties to compare.

Input Schema

{
  "type": "object",
  "properties": {
    "material_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "maxItems": 5,
      "description": "List of Material_IDs to compare"
    },
    "properties": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional: which properties to include. Defaults to density, tensile, yield, max_temp, cost_tier."
    }
  },
  "required": [
    "material_ids"
  ],
  "additionalProperties": false
}
βšͺcompare_processes(process_ids, compare_on)

Use when the user wants to compare manufacturing processes (e.g. 'SLS vs FDM vs SLA comparison', 'which process has better tolerance: CNC or injection molding?'). Accepts 2–5 process IDs and optional metric list.

Input Schema

{
  "type": "object",
  "properties": {
    "process_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "maxItems": 5
    },
    "compare_on": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "tolerance",
          "speed",
          "cost_tier",
          "materials",
          "min_feature_size",
          "surface_finish"
        ]
      },
      "description": "Optional: metrics to include. Omit for all metrics."
    }
  },
  "required": [
    "process_ids"
  ],
  "additionalProperties": false
}
βšͺfilter_materials_by_constraint(constraints, process_id)

Use when the user specifies material requirements (e.g. 'density < 3 g/cmΒ³', 'tensile > 400 MPa', 'max temp β‰₯ 200Β°C'). Returns all materials that pass every constraint. Supports gte, lte, eq, contains operators.

Input Schema

{
  "type": "object",
  "properties": {
    "constraints": {
      "type": "array",
      "minItems": 1,
      "maxItems": 8,
      "items": {
        "type": "object",
        "required": [
          "property",
          "operator",
          "value"
        ],
        "properties": {
          "property": {
            "type": "string",
            "description": "Property name (e.g. density_g_cm3, tensile_strength_mpa, max_service_temp_c, cost_tier)"
          },
          "operator": {
            "type": "string",
            "enum": [
              "gte",
              "lte",
              "eq",
              "contains"
            ]
          },
          "value": {
            "description": "Numeric for gte/lte/eq on numeric fields; string for eq/contains on text fields"
          }
        }
      }
    },
    "process_id": {
      "type": "string",
      "description": "Optional: only return materials compatible with this process"
    }
  },
  "required": [
    "constraints"
  ],
  "additionalProperties": false
}
🟒find_alternative_processes(process_id, material_id, constraints)

Use when the user asks 'what can replace FDM for this part?', 'alternative to CNC for low volumes?', or needs to switch process due to lead time / cost / material constraints.

Input Schema

{
  "type": "object",
  "properties": {
    "process_id": {
      "type": "string"
    },
    "material_id": {
      "type": "string",
      "description": "Optional: filter alternatives compatible with this material."
    },
    "constraints": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "max_lead_days": {
          "type": "number"
        },
        "cost_tier": {
          "type": "string",
          "enum": [
            "low",
            "medium",
            "high"
          ]
        },
        "min_build_volume_cm3": {
          "type": "number"
        }
      }
    }
  },
  "required": [
    "process_id"
  ],
  "additionalProperties": false
}
🟒find_equipment_by_process(process_id, build_size_min_mm, layer_thickness_max_micron, material_id)

Use when the user asks 'what machines can do SLS?', 'do you have equipment that can print 300mm Γ— 300mm?', 'which printers support PEEK material?'. Returns matching equipment with build volumes, layer thickness, and availability status.

Input Schema

{
  "type": "object",
  "properties": {
    "process_id": {
      "type": "string"
    },
    "build_size_min_mm": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "x": {
          "type": "number"
        },
        "y": {
          "type": "number"
        },
        "z": {
          "type": "number"
        }
      }
    },
    "layer_thickness_max_micron": {
      "type": "number"
    },
    "material_id": {
      "type": "string",
      "description": "Optional: filter by material compatibility."
    }
  },
  "required": [
    "process_id"
  ],
  "additionalProperties": false
}
🟒find_equivalent_materials(material_id, match_criteria, max_results)

Use when the user wants alternatives to a specific material (e.g. 'what can replace SS304?', 'cheaper alternative to titanium'). Returns materials ranked by similarity score. Match criteria include strength, density, cost_tier, process_compat, thermal, corrosion.

Input Schema

{
  "type": "object",
  "properties": {
    "material_id": {
      "type": "string"
    },
    "match_criteria": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "strength",
          "density",
          "cost_tier",
          "process_compat",
          "thermal",
          "corrosion"
        ]
      },
      "minItems": 1
    },
    "max_results": {
      "type": "number",
      "minimum": 1,
      "maximum": 10,
      "default": 5
    }
  },
  "required": [
    "material_id",
    "match_criteria"
  ],
  "additionalProperties": false
}
🟒get_equipment_qc_specs(model_id)

Use when the user asks about machine certifications, dimensional accuracy, or QC procedures (e.g. 'is this machine ISO certified?', 'what is the dimensional accuracy of the EOS M 290?', 'what inspection methods do you use for this machine?').

Input Schema

{
  "type": "object",
  "properties": {
    "model_id": {
      "type": "string"
    }
  },
  "required": [
    "model_id"
  ],
  "additionalProperties": false
}
🟒get_industry_requirements(industry_id)

Use when the user asks industry-specific requirements (e.g. 'what materials are used in aerospace?', 'what certifications does the medical device industry require?', 'typical tolerances for automotive parts?').

Input Schema

{
  "type": "object",
  "properties": {
    "industry_id": {
      "type": "string"
    }
  },
  "required": [
    "industry_id"
  ],
  "additionalProperties": false
}
🟒get_iso2768_tolerances(grade, nominal_dimension_mm, tolerance_type)

Use when the user asks about ISO 2768 tolerances (e.g. 'what is ISO 2768-m tolerance for 50mm?', 'ISO 2768 fine grade flatness?', 'general tolerance for machined parts'). Returns the Β±tolerance value, range string, and applicable dimension range.

Input Schema

{
  "type": "object",
  "properties": {
    "grade": {
      "type": "string",
      "enum": [
        "f",
        "m",
        "c",
        "v"
      ],
      "description": "f=Fine, m=Medium, c=Coarse, v=Very Coarse"
    },
    "nominal_dimension_mm": {
      "type": "number",
      "minimum": 0.5,
      "maximum": 4000
    },
    "tolerance_type": {
      "type": "string",
      "enum": [
        "linear",
        "angular",
        "flatness",
        "straightness",
        "roundness"
      ]
    }
  },
  "required": [
    "grade",
    "nominal_dimension_mm",
    "tolerance_type"
  ],
  "additionalProperties": false
}
🟒get_material_compliance(material_id, standards)

Use when the user needs to know if a material meets regulatory requirements (e.g. 'is this plastic RoHS compliant?', 'does this aluminum meet FDA requirements?'). Returns compliance status for RoHS, REACH, FDA, ISO, ASTM, CE.

Input Schema

{
  "type": "object",
  "properties": {
    "material_id": {
      "type": "string"
    },
    "standards": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "RoHS",
          "REACH",
          "FDA",
          "ISO",
          "ASTM",
          "CE"
        ]
      },
      "description": "Optional: check specific standards only. Omit to return all known compliance data."
    }
  },
  "required": [
    "material_id"
  ],
  "additionalProperties": false
}
🟒get_material_process_compatibility(material_id, process_ids)

Use when the user asks which processes can be used with a material (e.g. 'can titanium be FDM printed?', 'what processes work with PEEK?'). Returns compatible and incompatible process lists.

Input Schema

{
  "type": "object",
  "properties": {
    "material_id": {
      "type": "string"
    },
    "process_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional: check specific processes only. Omit to return all."
    }
  },
  "required": [
    "material_id"
  ],
  "additionalProperties": false
}
🟒get_process_specs(process_id)

Use when the user asks about process specs, capabilities, or constraints (e.g. 'what is the tolerance of SLS?', 'what is the build volume of FDM?', 'what lead time for CNC machining?'). Returns category, build size, tolerance, compatible materials, lead time, and surface finish.

Input Schema

{
  "type": "object",
  "properties": {
    "process_id": {
      "type": "string"
    }
  },
  "required": [
    "process_id"
  ],
  "additionalProperties": false
}
βšͺmatch_industry_materials(industry_id, process_id, requirements)

Use when the user asks 'what materials are approved for medical devices?', 'best lightweight materials for aerospace?', 'food-safe materials for injection molding?'. Cross-references industries and materials dictionaries.

Input Schema

{
  "type": "object",
  "properties": {
    "industry_id": {
      "type": "string"
    },
    "process_id": {
      "type": "string",
      "description": "Optional: filter by process compatibility."
    },
    "requirements": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "biocompatible",
          "corrosion_resistant",
          "high_temp",
          "lightweight",
          "food_safe",
          "flame_retardant",
          "uv_stable"
        ]
      }
    }
  },
  "required": [
    "industry_id"
  ],
  "additionalProperties": false
}
🟑quote_calc(parts, notes)

Use this tool to CALCULATE a 3D printing price. Provide material_name, color, lead_time (must match the 3dp-pricing dictionary), quantity, and either weight_g or volume_cm3 β€” or an uploaded file_key (obtained from /v1/uploads/presign + /v1/uploads/complete) which is parsed to get volume. This tool does NOT create an order; it returns part_price / total / order_url. Output is desensitized (no unit prices).

Input Schema

{
  "type": "object",
  "properties": {
    "parts": {
      "type": "array",
      "minItems": 1,
      "description": "One or more part lines. Each line is priced independently.",
      "items": {
        "type": "object",
        "required": [
          "material_name",
          "color",
          "lead_time",
          "quantity"
        ],
        "additionalProperties": false,
        "properties": {
          "material_name": {
            "type": "string",
            "description": "Material name β€” must match a 3dp-pricing entry (case-insensitive). E.g. 'PA12', 'Resin Standard', 'PEEK'."
          },
          "color": {
            "type": "string",
            "description": "Color β€” must match a 3dp-pricing entry. E.g. 'White', 'Black', 'Natural'."
          },
          "lead_time": {
            "type": "string",
            "description": "Lead time tier β€” must match a 3dp-pricing entry. E.g. 'Standard', 'Express', 'Economy'."
          },
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "description": "Number of pieces for this part line."
          },
          "weight_g": {
            "type": "number",
            "minimum": 0.01,
            "description": "Single-part weight in grams (preferred). If provided, volume_cm3/file_key are ignored."
          },
          "volume_cm3": {
            "type": "number",
            "minimum": 0.01,
            "description": "Single-part volume in cmΒ³. Weight = volume Γ— density. Required if weight_g/file_key not provided."
          },
          "file_key": {
            "type": "string",
            "description": "R2 object key of a CAD file uploaded by this principal (uploads/{principal_id}/...). Parsed via parse_cad to obtain volume."
          },
          "notes": {
            "type": "string",
            "description": "Optional notes for this part line (e.g. surface finish)."
          }
        }
      }
    },
    "notes": {
      "type": "string",
      "description": "Order-level notes (applies to all parts)."
    }
  },
  "required": [
    "parts"
  ],
  "additionalProperties": false
}
🟒search_materials(query, category_hint, process_filter, limit)

Use to resolve a user's material description (industry grade name like 'PA12', a colloquial term like 'nylon', a Chinese term, or a vague description) into concrete materials.csv entries. Unlike compare_materials/find_equivalent_materials (which need an exact known ID), this tool accepts messy input and returns a ranked list of candidates β€” use it as the first step when you don't already know the exact material_id. If multiple candidates come back, ask the user to pick one rather than guessing. Optionally narrow by category_hint (Plastic/Metal/Rubber/Resin/Powder Metals/Powder Polymers) or process_filter (e.g. 'Selective Laser Sintering', 'SLS', 'Injection Molding') when the context already implies a manufacturing process.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "User's material description, ideally already normalized to English (e.g. 'PA12', 'nylon', '316 stainless steel')."
    },
    "category_hint": {
      "type": "string",
      "enum": [
        "Plastic",
        "Metal",
        "Rubber",
        "Resin",
        "Powder Metals",
        "Powder Polymers"
      ],
      "description": "Optional coarse category filter matched against Material_Category(L1)/Material_Sub-Category(L2)."
    },
    "process_filter": {
      "type": "string",
      "description": "Optional manufacturing process substring filter matched against Compatible_Processes, e.g. 'SLS', 'Selective Laser Sintering', 'Injection Molding'."
    },
    "limit": {
      "type": "number",
      "minimum": 1,
      "maximum": 20,
      "description": "Max candidates to return. Defaults to 10."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded20 tools