Koskamo

ply 3D Printing MCP

This MCP server enables AI agents to interact with ply's 3D printing service by getting instant quotes, uploading 3D files, selecting materials, and placing orders directly from chat interfaces like Claude and ChatGPT.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

ply 3D Printing MCP logo, by plyVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by ply
You need:On a Team or Enterprise plan, an Owner adds it for the organization first.No account or sign-in is needed.
MCP endpoint (Streamable HTTP)
https://www.plyparts.com/mcp
Vendor documentation

What you can do with it

  • Get instant price for a 3D part
  • Upload STL or STEP files
  • Select material and color
  • Place an order for printing

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
ply 3D Printing 1.1.0
MCP protocol
2025-06-18
Tools
7 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

ply (plyparts.com) is a US 3D printing service by ADD ASTRA®. Use ply to price and order custom 3D-printed parts. - make_part builds simple parts from exact sizes in millimeters: plates with holes, L-brackets, spacers/standoffs, washers and boxes with lids. Convert inches (1 in = 25.4 mm) and screw sizes (M3 clearance hole 3.4 mm, M4 4.5 mm, M5 5.5 mm, #6 3.6 mm, #8 4.3 mm, #10 5 mm, 1/4" 6.6 mm) yourself and say so. Never change a size the customer gave to make a part fit: ply checks the design and explains any problem; pass that on and ask what they'd like. - price_file prices the customer's own 3D file (STL, 3MF, STEP, OBJ): with no file it shows ply's card with an upload button. - Ready-made models: find_models searches Printables; you can also use your own web search. ply doesn't download models: give the customer the model's page link (price_model_link shows it in ply's card with an upload box), they download the file themselves and drop it into the card (in ChatGPT they can also attach it here), then price it with price_file. Whether they may have a model printed is the customer's call (they confirm it at checkout): don't look up, judge or comment on model licenses. - If find_models and your own search find nothing good, suggest the customer browse these model sites themselves (each with its link), download a model and drop it into ply's card. The list is also on plyparts.com/ai. - Printables (https://www.printables.com): A huge library of practical and functional prints. - Thingiverse (https://www.thingiverse.com): One of the oldest and largest model libraries. - MakerWorld (https://makerworld.com): Lots of ready-to-print projects, including multi-color ones. - Cults (https://cults3d.com): A designer marketplace with free and paid models. - MyMiniFactory (https://www.myminifactory.com): Miniatures, figures, tabletop and display pieces from independent designers. - Thangs (https://thangs.com): Searches models across many sites, plus its own designer store. - GrabCAD (https://grabcad.com/library): Engineering and CAD models (often STEP files) shared by engineers. - Yeggi (https://www.yeggi.com): A search engine that looks through many model sites at once. - recommend_material runs ply's own material advisor on the part and what it's for (pass the file's fileName too). Use it when the customer isn't sure which material to pick; ask its follow-up questions in your own words; then price with the recommended settings. - Ask only for what's truly missing; ply fills sensible defaults (black PLA, Balanced strength, quantity 1). The card lets the customer change material, color, strength and quantity. - Only quote prices and dates ply returns. Never estimate a price yourself. - When the customer wants to order, call order_part (or they press "Order on ply" in the card). They finish on plyparts.com: shipping, payment (card, Apple Pay, Google Pay), and an engineer reviews every order before it prints. Nothing is charged in the chat. - ply does not print firearms, firearm parts or weapons.

Tools

7 advertised

make_part — Make a custom part
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

make_part input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "template"
  ],
  "properties": {
    "lid": {
      "enum": [
        "lift-off",
        "none"
      ],
      "type": "string",
      "description": "box: lid"
    },
    "legA": {
      "type": "number",
      "description": "bracket: base leg length (mm)"
    },
    "legB": {
      "type": "number",
      "description": "bracket: upright leg length (mm)"
    },
    "wall": {
      "type": "number",
      "description": "box: wall thickness (mm)"
    },
    "color": {
      "type": "string",
      "description": "Color name, e.g. black, white, red (default black)"
    },
    "depth": {
      "type": "number",
      "description": "plate: depth (mm)"
    },
    "shape": {
      "enum": [
        "round",
        "hex"
      ],
      "type": "string",
      "description": "spacer/washer shape"
    },
    "width": {
      "type": "number",
      "description": "plate/bracket: width (mm)"
    },
    "height": {
      "type": "number",
      "description": "spacer: height; washer: thickness (mm)"
    },
    "holesA": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "bracket: holes in the base leg"
    },
    "holesB": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "bracket: holes in the upright leg"
    },
    "gridRows": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "plate, grid: hole rows"
    },
    "material": {
      "type": "string",
      "description": "Material name or id, e.g. PLA, PETG, ASA, TPU (default PLA)."
    },
    "quantity": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "How many (default 1)"
    },
    "strength": {
      "enum": [
        "economy",
        "balanced",
        "strong",
        "heavy"
      ],
      "type": "string",
      "description": "Plastic parts only. Default balanced; strong for parts under load"
    },
    "template": {
      "enum": [
        "plate",
        "bracket",
        "spacer",
        "washer",
        "box"
      ],
      "type": "string",
      "description": "plate = flat plate with holes; bracket = L-bracket; spacer = spacer/standoff; washer; box = box with optional lift-off lid"
    },
    "holeInset": {
      "type": "number",
      "description": "plate, corner holes: distance from each edge to the hole center (mm)"
    },
    "thickness": {
      "type": "number",
      "description": "plate/bracket: thickness (mm)"
    },
    "extraHoles": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "x",
          "y",
          "diameter"
        ],
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "diameter": {
            "type": "number"
          }
        }
      },
      "description": "plate: holes at exact spots, x/y = hole center in mm from the plate's center"
    },
    "innerDepth": {
      "type": "number",
      "description": "box: inside depth (mm)"
    },
    "innerWidth": {
      "type": "number",
      "description": "box: inside width (mm)"
    },
    "gridColumns": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "plate, grid: hole columns"
    },
    "holePattern": {
      "enum": [
        "none",
        "center",
        "corners",
        "grid"
      ],
      "type": "string",
      "description": "plate: hole layout"
    },
    "innerHeight": {
      "type": "number",
      "description": "box: inside height (mm)"
    },
    "innerRadius": {
      "type": "number",
      "description": "bracket: inside corner radius (mm)"
    },
    "cornerRadius": {
      "type": "number",
      "description": "plate: outside corner radius, 0 = square; box: inside corner radius (mm)"
    },
    "holeDiameter": {
      "type": "number",
      "description": "plate: diameter of the pattern holes; bracket: hole diameter (0 = no holes) (mm)"
    },
    "innerDiameter": {
      "type": "number",
      "description": "spacer/washer: hole diameter, 0 = solid spacer (mm)"
    },
    "outerDiameter": {
      "type": "number",
      "description": "spacer/washer: outside diameter (hex: across the flats) (mm)"
    }
  }
}
make_part annotations
{
  "title": "Make a custom part",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
price_file — Price a 3D file
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

price_file input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string"
        },
        "file_name": {
          "type": "string"
        },
        "mime_type": {
          "type": "string"
        },
        "download_url": {
          "type": "string"
        }
      },
      "description": "A 3D file the customer attached in this chat"
    },
    "path": {
      "type": "string",
      "description": "The file's ply path from an earlier price_file result"
    },
    "color": {
      "type": "string",
      "description": "Color name, e.g. black, white, red (default black)"
    },
    "units": {
      "enum": [
        "mm",
        "in"
      ],
      "type": "string",
      "description": "Units of an STL/OBJ file, which doesn't say (default mm). Use in if the part comes out 25x too small."
    },
    "coating": {
      "enum": [
        "none",
        "matte",
        "gloss"
      ],
      "type": "string",
      "description": "Resin only: coating (needs sanding)"
    },
    "process": {
      "enum": [
        "fdm",
        "resin"
      ],
      "type": "string",
      "description": "fdm = plastic (default); resin = fine detail (miniatures, figurines, smooth looks)"
    },
    "sanding": {
      "type": "boolean",
      "description": "Resin only: sanded finish"
    },
    "fileName": {
      "type": "string",
      "description": "The file's name, with a path"
    },
    "material": {
      "type": "string",
      "description": "Material name or id, e.g. PLA, PETG, ASA, TPU (default PLA)."
    },
    "quantity": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "How many (default 1)"
    },
    "strength": {
      "enum": [
        "economy",
        "balanced",
        "strong",
        "heavy"
      ],
      "type": "string",
      "description": "Plastic parts only. Default balanced; strong for parts under load"
    },
    "sourceUrl": {
      "type": "string",
      "description": "The model page the customer picked (they download the file there and drop it in the card)"
    },
    "sourceTitle": {
      "type": "string",
      "description": "That model's name"
    }
  }
}
price_file annotations
{
  "title": "Price a 3D file",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
price_model_link — Show a model's link with an upload box
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show a 3D model's page in ply's card with an upload box: the customer opens the link, downloads the file (STL, 3MF, STEP or OBJ) and drops it in for an instant price. ply doesn't download models from any site itself.

price_model_link input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The model's page"
    },
    "color": {
      "type": "string",
      "description": "Color name, e.g. black, white, red (default black)"
    },
    "title": {
      "type": "string",
      "description": "The model's name"
    },
    "units": {
      "enum": [
        "mm",
        "in"
      ],
      "type": "string",
      "description": "Units of an STL/OBJ file, which doesn't say (default mm). Use in if the part comes out 25x too small."
    },
    "coating": {
      "enum": [
        "none",
        "matte",
        "gloss"
      ],
      "type": "string",
      "description": "Resin only: coating (needs sanding)"
    },
    "process": {
      "enum": [
        "fdm",
        "resin"
      ],
      "type": "string",
      "description": "fdm = plastic (default); resin = fine detail (miniatures, figurines, smooth looks)"
    },
    "sanding": {
      "type": "boolean",
      "description": "Resin only: sanded finish"
    },
    "material": {
      "type": "string",
      "description": "Material name or id, e.g. PLA, PETG, ASA, TPU (default PLA)."
    },
    "quantity": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "How many (default 1)"
    },
    "strength": {
      "enum": [
        "economy",
        "balanced",
        "strong",
        "heavy"
      ],
      "type": "string",
      "description": "Plastic parts only. Default balanced; strong for parts under load"
    }
  }
}
price_model_link annotations
{
  "title": "Show a model's link with an upload box",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_models — Find printable models
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search Printables for ready-made 3D models. Returns titles, designers and page links; the customer downloads their pick and drops it into ply's card.

find_models input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "What to look for, e.g. 'milwaukee m18 battery holder'"
    }
  }
}
find_models annotations
{
  "title": "Find printable models",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
recommend_material — Recommend a material
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

recommend_material input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "use"
  ],
  "properties": {
    "lid": {
      "enum": [
        "lift-off",
        "none"
      ],
      "type": "string",
      "description": "box: lid"
    },
    "use": {
      "type": "string",
      "description": "What the part is for, in the customer's words (where it's used, heat, water, loads, looks)"
    },
    "legA": {
      "type": "number",
      "description": "bracket: base leg length (mm)"
    },
    "legB": {
      "type": "number",
      "description": "bracket: upright leg length (mm)"
    },
    "path": {
      "type": "string",
      "description": "A file's ply path from price_file"
    },
    "wall": {
      "type": "number",
      "description": "box: wall thickness (mm)"
    },
    "depth": {
      "type": "number",
      "description": "plate: depth (mm)"
    },
    "shape": {
      "enum": [
        "round",
        "hex"
      ],
      "type": "string",
      "description": "spacer/washer shape"
    },
    "width": {
      "type": "number",
      "description": "plate/bracket: width (mm)"
    },
    "height": {
      "type": "number",
      "description": "spacer: height; washer: thickness (mm)"
    },
    "holesA": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "bracket: holes in the base leg"
    },
    "holesB": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "bracket: holes in the upright leg"
    },
    "answers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "question",
          "answer"
        ],
        "properties": {
          "answer": {
            "type": "string"
          },
          "question": {
            "type": "string"
          }
        }
      },
      "description": "The advisor's earlier questions and the customer's answers"
    },
    "fileName": {
      "type": "string",
      "description": "The file's name, as in price_file (it can tell the advisor what the part is)"
    },
    "gridRows": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "plate, grid: hole rows"
    },
    "template": {
      "enum": [
        "plate",
        "bracket",
        "spacer",
        "washer",
        "box"
      ],
      "type": "string",
      "description": "plate = flat plate with holes; bracket = L-bracket; spacer = spacer/standoff; washer; box = box with optional lift-off lid"
    },
    "holeInset": {
      "type": "number",
      "description": "plate, corner holes: distance from each edge to the hole center (mm)"
    },
    "thickness": {
      "type": "number",
      "description": "plate/bracket: thickness (mm)"
    },
    "extraHoles": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "x",
          "y",
          "diameter"
        ],
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "diameter": {
            "type": "number"
          }
        }
      },
      "description": "plate: holes at exact spots, x/y = hole center in mm from the plate's center"
    },
    "innerDepth": {
      "type": "number",
      "description": "box: inside depth (mm)"
    },
    "innerWidth": {
      "type": "number",
      "description": "box: inside width (mm)"
    },
    "gridColumns": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "plate, grid: hole columns"
    },
    "holePattern": {
      "enum": [
        "none",
        "center",
        "corners",
        "grid"
      ],
      "type": "string",
      "description": "plate: hole layout"
    },
    "innerHeight": {
      "type": "number",
      "description": "box: inside height (mm)"
    },
    "innerRadius": {
      "type": "number",
      "description": "bracket: inside corner radius (mm)"
    },
    "cornerRadius": {
      "type": "number",
      "description": "plate: outside corner radius, 0 = square; box: inside corner radius (mm)"
    },
    "holeDiameter": {
      "type": "number",
      "description": "plate: diameter of the pattern holes; bracket: hole diameter (0 = no holes) (mm)"
    },
    "innerDiameter": {
      "type": "number",
      "description": "spacer/washer: hole diameter, 0 = solid spacer (mm)"
    },
    "outerDiameter": {
      "type": "number",
      "description": "spacer/washer: outside diameter (hex: across the flats) (mm)"
    }
  }
}
recommend_material annotations
{
  "title": "Recommend a material",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
order_part — Order on ply
Advertised by the server during the last successful anonymous check.

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.

order_part input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "lid": {
      "enum": [
        "lift-off",
        "none"
      ],
      "type": "string",
      "description": "box: lid"
    },
    "legA": {
      "type": "number",
      "description": "bracket: base leg length (mm)"
    },
    "legB": {
      "type": "number",
      "description": "bracket: upright leg length (mm)"
    },
    "path": {
      "type": "string",
      "description": "A file's ply path (from price_file)"
    },
    "wall": {
      "type": "number",
      "description": "box: wall thickness (mm)"
    },
    "color": {
      "type": "string",
      "description": "Color name, e.g. black, white, red (default black)"
    },
    "depth": {
      "type": "number",
      "description": "plate: depth (mm)"
    },
    "shape": {
      "enum": [
        "round",
        "hex"
      ],
      "type": "string",
      "description": "spacer/washer shape"
    },
    "thumb": {
      "type": "string",
      "maxLength": 300000,
      "description": "Leave empty (the ply card fills in a picture)."
    },
    "units": {
      "enum": [
        "mm",
        "in"
      ],
      "type": "string",
      "description": "Units of an STL/OBJ file, which doesn't say (default mm). Use in if the part comes out 25x too small."
    },
    "width": {
      "type": "number",
      "description": "plate/bracket: width (mm)"
    },
    "height": {
      "type": "number",
      "description": "spacer: height; washer: thickness (mm)"
    },
    "holesA": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "bracket: holes in the base leg"
    },
    "holesB": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "bracket: holes in the upright leg"
    },
    "coating": {
      "enum": [
        "none",
        "matte",
        "gloss"
      ],
      "type": "string",
      "description": "Resin only: coating (needs sanding)"
    },
    "process": {
      "enum": [
        "fdm",
        "resin"
      ],
      "type": "string",
      "description": "fdm = plastic (default); resin = fine detail (miniatures, figurines, smooth looks)"
    },
    "sanding": {
      "type": "boolean",
      "description": "Resin only: sanded finish"
    },
    "fileName": {
      "type": "string"
    },
    "gridRows": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "plate, grid: hole rows"
    },
    "material": {
      "type": "string",
      "description": "Material name or id, e.g. PLA, PETG, ASA, TPU (default PLA)."
    },
    "quantity": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "How many (default 1)"
    },
    "strength": {
      "enum": [
        "economy",
        "balanced",
        "strong",
        "heavy"
      ],
      "type": "string",
      "description": "Plastic parts only. Default balanced; strong for parts under load"
    },
    "template": {
      "enum": [
        "plate",
        "bracket",
        "spacer",
        "washer",
        "box"
      ],
      "type": "string",
      "description": "plate = flat plate with holes; bracket = L-bracket; spacer = spacer/standoff; washer; box = box with optional lift-off lid"
    },
    "holeInset": {
      "type": "number",
      "description": "plate, corner holes: distance from each edge to the hole center (mm)"
    },
    "thickness": {
      "type": "number",
      "description": "plate/bracket: thickness (mm)"
    },
    "extraHoles": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "x",
          "y",
          "diameter"
        ],
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "diameter": {
            "type": "number"
          }
        }
      },
      "description": "plate: holes at exact spots, x/y = hole center in mm from the plate's center"
    },
    "innerDepth": {
      "type": "number",
      "description": "box: inside depth (mm)"
    },
    "innerWidth": {
      "type": "number",
      "description": "box: inside width (mm)"
    },
    "gridColumns": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "plate, grid: hole columns"
    },
    "holePattern": {
      "enum": [
        "none",
        "center",
        "corners",
        "grid"
      ],
      "type": "string",
      "description": "plate: hole layout"
    },
    "innerHeight": {
      "type": "number",
      "description": "box: inside height (mm)"
    },
    "innerRadius": {
      "type": "number",
      "description": "bracket: inside corner radius (mm)"
    },
    "cornerRadius": {
      "type": "number",
      "description": "plate: outside corner radius, 0 = square; box: inside corner radius (mm)"
    },
    "holeDiameter": {
      "type": "number",
      "description": "plate: diameter of the pattern holes; bracket: hole diameter (0 = no holes) (mm)"
    },
    "innerDiameter": {
      "type": "number",
      "description": "spacer/washer: hole diameter, 0 = solid spacer (mm)"
    },
    "outerDiameter": {
      "type": "number",
      "description": "spacer/washer: outside diameter (hex: across the flats) (mm)"
    }
  }
}
order_part annotations
{
  "title": "Order on ply",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
list_materials — List ply materials and colors
Advertised by the server during the last successful anonymous check.
Advertised read-only

The materials, colors and strength levels ply prints custom parts in, with what each material is good for.

list_materials input schema
{
  "type": "object",
  "properties": {}
}
list_materials annotations
{
  "title": "List ply materials and colors",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

ply part card

Advertised by the server during the last successful anonymous check.

ply's part card: 3D view, options, live price and Order on ply

ply part card URI
ui://ply/part-card-51ef19422016.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
817 ms
95th percentile latency
817 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 817 ms · metadata changed · 7 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http ply-3d-printing-mcp https://www.plyparts.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add ply-3d-printing-mcp --url https://www.plyparts.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable ply-3d-printing-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "ply-3d-printing-mcp": {
      "url": "https://www.plyparts.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "ply-3d-printing-mcp": {
      "type": "streamableHttp",
      "url": "https://www.plyparts.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start ply-3d-printing-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "ply-3d-printing-mcp": {
      "type": "http",
      "url": "https://www.plyparts.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http ply-3d-printing-mcp https://www.plyparts.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "ply-3d-printing-mcp": {
      "url": "https://www.plyparts.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "ply-3d-printing-mcp": {
      "serverUrl": "https://www.plyparts.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like ply 3D Printing MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run ply 3D Printing MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing