ply 3D Printing
Custom 3D-printed parts: describe a part, upload a 3D file or pick a model, see a live price, order.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"ply": {
"url": "https://www.plyparts.com/mcp"
}
}
}遠端端點
https://www.plyparts.com/mcpstreamable-http它能做什麼
工具清單
工具(7)
🟢make_part(template, width, depth, thickness, cornerRadius, ...)
Build, check and price a custom 3D-printed part from exact sizes (mm): plate with holes, L-bracket, spacer/standoff, washer, or box with lid. Shows the part in 3D with its price and an Order button. Sizes left out use sensible defaults. Use again with new sizes or options when the customer asks for changes.
輸入結構描述
{
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"plate",
"bracket",
"spacer",
"washer",
"box"
],
"description": "plate = flat plate with holes; bracket = L-bracket; spacer = spacer/standoff; washer; box = box with optional lift-off lid"
},
"width": {
"description": "plate/bracket: width (mm)",
"type": "number"
},
"depth": {
"description": "plate: depth (mm)",
"type": "number"
},
"thickness": {
"description": "plate/bracket: thickness (mm)",
"type": "number"
},
"cornerRadius": {
"description": "plate: outside corner radius, 0 = square; box: inside corner radius (mm)",
"type": "number"
},
"holePattern": {
"description": "plate: hole layout",
"type": "string",
"enum": [
"none",
"center",
"corners",
"grid"
]
},
"holeDiameter": {
"description": "plate: diameter of the pattern holes; bracket: hole diameter (0 = no holes) (mm)",
"type": "number"
},
"holeInset": {
"description": "plate, corner holes: distance from each edge to the hole center (mm)",
"type": "number"
},
"gridColumns": {
"description": "plate, grid: hole columns",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"gridRows": {
"description": "plate, grid: hole rows",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"extraHoles": {
"description": "plate: holes at exact spots, x/y = hole center in mm from the plate's center",
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"diameter": {
"type": "number"
}
},
"required": [
"x",
"y",
"diameter"
]
}
},
"legA": {
"description": "bracket: base leg length (mm)",
"type": "number"
},
"legB": {
"description": "bracket: upright leg length (mm)",
"type": "number"
},
"innerRadius": {
"description": "bracket: inside corner radius (mm)",
"type": "number"
},
"holesA": {
"description": "bracket: holes in the base leg",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"holesB": {
"description": "bracket: holes in the upright leg",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"outerDiameter": {
"description": "spacer/washer: outside diameter (hex: across the flats) (mm)",
"type": "number"
},
"innerDiameter": {
"description": "spacer/washer: hole diameter, 0 = solid spacer (mm)",
"type": "number"
},
"height": {
"description": "spacer: height; washer: thickness (mm)",
"type": "number"
},
"shape": {
"description": "spacer/washer shape",
"type": "string",
"enum": [
"round",
"hex"
]
},
"innerWidth": {
"description": "box: inside width (mm)",
"type": "number"
},
"innerDepth": {
"description": "box: inside depth (mm)",
"type": "number"
},
"innerHeight": {
"description": "box: inside height (mm)",
"type": "number"
},
"wall": {
"description": "box: wall thickness (mm)",
"type": "number"
},
"lid": {
"description": "box: lid",
"type": "string",
"enum": [
"lift-off",
"none"
]
},
"material": {
"description": "Material name or id, e.g. PLA, PETG, ASA, TPU (default PLA).",
"type": "string"
},
"color": {
"description": "Color name, e.g. black, white, red (default black)",
"type": "string"
},
"strength": {
"description": "Plastic parts only. Default balanced; strong for parts under load",
"type": "string",
"enum": [
"economy",
"balanced",
"strong",
"heavy"
]
},
"quantity": {
"description": "How many (default 1)",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"template"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢price_file(file, path, fileName, sourceUrl, sourceTitle, ...)
Price the customer's 3D file (STL, 3MF, STEP or OBJ) and show it in ply's card. Without a file, shows the card with an upload button (with sourceUrl: the model page to download it from). In ChatGPT, pass a file the customer attached. Pass `path` (from an earlier result) to change options for a file already priced.
輸入結構描述
{
"type": "object",
"properties": {
"file": {
"description": "A 3D file the customer attached in this chat",
"type": "object",
"properties": {
"download_url": {
"type": "string"
},
"file_id": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"file_name": {
"type": "string"
}
},
"required": [
"download_url",
"file_id"
]
},
"path": {
"description": "The file's ply path from an earlier price_file result",
"type": "string"
},
"fileName": {
"description": "The file's name, with a path",
"type": "string"
},
"sourceUrl": {
"description": "The model page the customer picked (they download the file there and drop it in the card)",
"type": "string"
},
"sourceTitle": {
"description": "That model's name",
"type": "string"
},
"material": {
"description": "Material name or id, e.g. PLA, PETG, ASA, TPU (default PLA).",
"type": "string"
},
"color": {
"description": "Color name, e.g. black, white, red (default black)",
"type": "string"
},
"strength": {
"description": "Plastic parts only. Default balanced; strong for parts under load",
"type": "string",
"enum": [
"economy",
"balanced",
"strong",
"heavy"
]
},
"quantity": {
"description": "How many (default 1)",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"process": {
"description": "fdm = plastic (default); resin = fine detail (miniatures, figurines, smooth looks)",
"type": "string",
"enum": [
"fdm",
"resin"
]
},
"units": {
"description": "Units of an STL/OBJ file, which doesn't say (default mm). Use in if the part comes out 25x too small.",
"type": "string",
"enum": [
"mm",
"in"
]
},
"sanding": {
"description": "Resin only: sanded finish",
"type": "boolean"
},
"coating": {
"description": "Resin only: coating (needs sanding)",
"type": "string",
"enum": [
"none",
"matte",
"gloss"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢price_model_link(url, title, file, sizeMm, material, ...)
Price a 3D model from its page link and show it in ply's card. Printables: ply fetches the file itself if the license allows printing it for sale (CC0, CC BY, CC BY-SA, GPL, Commercial Use…) and credits the designer; other licenses are declined with the reason. Poly Haven (CC0 decor and props made at real-world size): ply fetches it scaled to fit (150 mm on its longest side, or sizeMm). Other sites (Thingiverse, MakerWorld, MyMiniFactory, Thangs, Cults3D…): the card links to the page and the customer drops the downloaded file in. If a Printables model has several files, ply lists them: pass the one wanted as `file`.
輸入結構描述
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The model's page"
},
"title": {
"description": "The model's name (for links to sites ply doesn't fetch from)",
"type": "string"
},
"file": {
"description": "Which file to print, by name, when the model has several",
"type": "string"
},
"sizeMm": {
"description": "Poly Haven only: the printed size of the longest side, mm (up to 250)",
"type": "number"
},
"material": {
"description": "Material name or id, e.g. PLA, PETG, ASA, TPU (default PLA).",
"type": "string"
},
"color": {
"description": "Color name, e.g. black, white, red (default black)",
"type": "string"
},
"strength": {
"description": "Plastic parts only. Default balanced; strong for parts under load",
"type": "string",
"enum": [
"economy",
"balanced",
"strong",
"heavy"
]
},
"quantity": {
"description": "How many (default 1)",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"process": {
"description": "fdm = plastic (default); resin = fine detail (miniatures, figurines, smooth looks)",
"type": "string",
"enum": [
"fdm",
"resin"
]
},
"units": {
"description": "Units of an STL/OBJ file, which doesn't say (default mm). Use in if the part comes out 25x too small.",
"type": "string",
"enum": [
"mm",
"in"
]
},
"sanding": {
"description": "Resin only: sanded finish",
"type": "boolean"
},
"coating": {
"description": "Resin only: coating (needs sanding)",
"type": "string",
"enum": [
"none",
"matte",
"gloss"
]
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢find_models(query)
Search for ready-made 3D models ply may print and sell: Printables (open or commercial-use licenses only; non-commercial models are left out) and Poly Haven (CC0 decor, props and figures, scaled to fit). Returns titles, designers, licenses and page links.
輸入結構描述
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "What to look for, e.g. 'milwaukee m18 battery holder'"
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recommend_material(use, answers, path, fileName, template, ...)
Run ply's material advisor ("Help me choose" on plyparts.com) for a part: it may ask up to 2 questions about how the part is used, then recommends a process, material, color and strength. Give either the part's ply `path` (a file) or its template and sizes (a built part).
輸入結構描述
{
"type": "object",
"properties": {
"use": {
"type": "string",
"description": "What the part is for, in the customer's words (where it's used, heat, water, loads, looks)"
},
"answers": {
"description": "The advisor's earlier questions and the customer's answers",
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string"
},
"answer": {
"type": "string"
}
},
"required": [
"question",
"answer"
]
}
},
"path": {
"description": "A file's ply path from price_file",
"type": "string"
},
"fileName": {
"description": "The file's name, as in price_file (it can tell the advisor what the part is)",
"type": "string"
},
"template": {
"type": "string",
"enum": [
"plate",
"bracket",
"spacer",
"washer",
"box"
],
"description": "plate = flat plate with holes; bracket = L-bracket; spacer = spacer/standoff; washer; box = box with optional lift-off lid"
},
"width": {
"description": "plate/bracket: width (mm)",
"type": "number"
},
"depth": {
"description": "plate: depth (mm)",
"type": "number"
},
"thickness": {
"description": "plate/bracket: thickness (mm)",
"type": "number"
},
"cornerRadius": {
"description": "plate: outside corner radius, 0 = square; box: inside corner radius (mm)",
"type": "number"
},
"holePattern": {
"description": "plate: hole layout",
"type": "string",
"enum": [
"none",
"center",
"corners",
"grid"
]
},
"holeDiameter": {
"description": "plate: diameter of the pattern holes; bracket: hole diameter (0 = no holes) (mm)",
"type": "number"
},
"holeInset": {
"description": "plate, corner holes: distance from each edge to the hole center (mm)",
"type": "number"
},
"gridColumns": {
"description": "plate, grid: hole columns",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"gridRows": {
"description": "plate, grid: hole rows",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"extraHoles": {
"description": "plate: holes at exact spots, x/y = hole center in mm from the plate's center",
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"diameter": {
"type": "number"
}
},
"required": [
"x",
"y",
"diameter"
]
}
},
"legA": {
"description": "bracket: base leg length (mm)",
"type": "number"
},
"legB": {
"description": "bracket: upright leg length (mm)",
"type": "number"
},
"innerRadius": {
"description": "bracket: inside corner radius (mm)",
"type": "number"
},
"holesA": {
"description": "bracket: holes in the base leg",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"holesB": {
"description": "bracket: holes in the upright leg",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"outerDiameter": {
"description": "spacer/washer: outside diameter (hex: across the flats) (mm)",
"type": "number"
},
"innerDiameter": {
"description": "spacer/washer: hole diameter, 0 = solid spacer (mm)",
"type": "number"
},
"height": {
"description": "spacer: height; washer: thickness (mm)",
"type": "number"
},
"shape": {
"description": "spacer/washer shape",
"type": "string",
"enum": [
"round",
"hex"
]
},
"innerWidth": {
"description": "box: inside width (mm)",
"type": "number"
},
"innerDepth": {
"description": "box: inside depth (mm)",
"type": "number"
},
"innerHeight": {
"description": "box: inside height (mm)",
"type": "number"
},
"wall": {
"description": "box: wall thickness (mm)",
"type": "number"
},
"lid": {
"description": "box: lid",
"type": "string",
"enum": [
"lift-off",
"none"
]
}
},
"required": [
"use"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡order_part(template, width, depth, thickness, cornerRadius, ...)
Put a part into a ply cart and get the link to finish the order on plyparts.com (shipping, payment, engineer review). Nothing is charged here. For a built part pass the same template, sizes and options; for a file pass its path and options.
輸入結構描述
{
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"plate",
"bracket",
"spacer",
"washer",
"box"
],
"description": "plate = flat plate with holes; bracket = L-bracket; spacer = spacer/standoff; washer; box = box with optional lift-off lid"
},
"width": {
"description": "plate/bracket: width (mm)",
"type": "number"
},
"depth": {
"description": "plate: depth (mm)",
"type": "number"
},
"thickness": {
"description": "plate/bracket: thickness (mm)",
"type": "number"
},
"cornerRadius": {
"description": "plate: outside corner radius, 0 = square; box: inside corner radius (mm)",
"type": "number"
},
"holePattern": {
"description": "plate: hole layout",
"type": "string",
"enum": [
"none",
"center",
"corners",
"grid"
]
},
"holeDiameter": {
"description": "plate: diameter of the pattern holes; bracket: hole diameter (0 = no holes) (mm)",
"type": "number"
},
"holeInset": {
"description": "plate, corner holes: distance from each edge to the hole center (mm)",
"type": "number"
},
"gridColumns": {
"description": "plate, grid: hole columns",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"gridRows": {
"description": "plate, grid: hole rows",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"extraHoles": {
"description": "plate: holes at exact spots, x/y = hole center in mm from the plate's center",
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"diameter": {
"type": "number"
}
},
"required": [
"x",
"y",
"diameter"
]
}
},
"legA": {
"description": "bracket: base leg length (mm)",
"type": "number"
},
"legB": {
"description": "bracket: upright leg length (mm)",
"type": "number"
},
"innerRadius": {
"description": "bracket: inside corner radius (mm)",
"type": "number"
},
"holesA": {
"description": "bracket: holes in the base leg",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"holesB": {
"description": "bracket: holes in the upright leg",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"outerDiameter": {
"description": "spacer/washer: outside diameter (hex: across the flats) (mm)",
"type": "number"
},
"innerDiameter": {
"description": "spacer/washer: hole diameter, 0 = solid spacer (mm)",
"type": "number"
},
"height": {
"description": "spacer: height; washer: thickness (mm)",
"type": "number"
},
"shape": {
"description": "spacer/washer shape",
"type": "string",
"enum": [
"round",
"hex"
]
},
"innerWidth": {
"description": "box: inside width (mm)",
"type": "number"
},
"innerDepth": {
"description": "box: inside depth (mm)",
"type": "number"
},
"innerHeight": {
"description": "box: inside height (mm)",
"type": "number"
},
"wall": {
"description": "box: wall thickness (mm)",
"type": "number"
},
"lid": {
"description": "box: lid",
"type": "string",
"enum": [
"lift-off",
"none"
]
},
"path": {
"description": "A file's ply path (from price_file)",
"type": "string"
},
"fileName": {
"type": "string"
},
"material": {
"description": "Material name or id, e.g. PLA, PETG, ASA, TPU (default PLA).",
"type": "string"
},
"color": {
"description": "Color name, e.g. black, white, red (default black)",
"type": "string"
},
"strength": {
"description": "Plastic parts only. Default balanced; strong for parts under load",
"type": "string",
"enum": [
"economy",
"balanced",
"strong",
"heavy"
]
},
"quantity": {
"description": "How many (default 1)",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"process": {
"description": "fdm = plastic (default); resin = fine detail (miniatures, figurines, smooth looks)",
"type": "string",
"enum": [
"fdm",
"resin"
]
},
"units": {
"description": "Units of an STL/OBJ file, which doesn't say (default mm). Use in if the part comes out 25x too small.",
"type": "string",
"enum": [
"mm",
"in"
]
},
"sanding": {
"description": "Resin only: sanded finish",
"type": "boolean"
},
"coating": {
"description": "Resin only: coating (needs sanding)",
"type": "string",
"enum": [
"none",
"matte",
"gloss"
]
},
"thumb": {
"description": "Leave empty (the ply card fills in a picture).",
"type": "string",
"maxLength": 300000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_materials
The materials, colors and strength levels ply prints custom parts in, with what each material is good for.
輸入結構描述
{
"type": "object",
"properties": {}
}社群
證據