Collection of MCP servers for 3D printing: material profiles, text-to-3D generation via Tripo AI, and 3D printer control
Material profiles server has solid naming and descriptions (3 tools, all verb-noun, 150-200 char descriptions). Text-to-3D server adds 4 tools with good async workflow documentation. All 7 tools have input schemas with type definitions and parameter descriptions. However, output schemas are not formally documented, responses are inferred from docstrings. Error handling is minimal (no recovery guidance, no categorization). No tool annotations (readOnlyHint/destructiveHint). Parameter descriptions lack format constraints (e.g., 'format' enum not enforced in schema). Missing pagination for list_materials despite potentially large result sets.
Check the status of a 3D model generation task. Args: task_id: The task ID returned by generate_model or image_to_model. Returns: Task status including progress percentage. When status is "success", the output field contains download URLs.
Download a completed 3D model to a local file. Args: task_id: The task ID of a completed generation. output_path: Local file path to save the model to (e.g. "/tmp/model.glb"). Returns: Download result with file path and size in bytes.
Generate a 3D model from a text description using Tripo AI. The generation runs asynchronously. Use check_status() to poll progress, then download_model() to save the result. Args: prompt: Text description of the 3D model to generate (e.g. "a red coffee mug with a handle"). format: Desired output format for download — stl, glb, fbx, obj, usd, 3mf. Defaults to "stl" (best for 3D printing). Returns: Task info with task_id to use with check_status and download_model.
Return the full printing profile for a given material. Args: material: Material name (e.g. "PLA", "PETG", "ABS", "TPU"). Case-insensitive. Returns: Complete profile with temperatures, speeds, retraction settings, use cases, and notes.
Output schemas not formally documented. Tool descriptions mention return types (e.g., 'Task info with task_id') but no structured schema definition visible in code. LLMs cannot reliably extract fields or plan downstream calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Destructive tools (generate_model, image_to_model, download_model) should be marked with destructiveHint=true to signal irreversible side effects.
Error handling lacks recovery guidance. get_profile returns {'error': '...'} on unknown material but does not suggest calling list_materials() first. check_status and download_model have no documented error cases or retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Generate a 3D model from a reference image using Tripo AI. Uploads the image, then starts async generation. Use check_status() to poll progress, then download_model() to save the result. Args: image_path: Absolute path to a local image file (JPEG, PNG, or WebP). format: Desired output format for download — stl, glb, fbx, obj, usd, 3mf. Defaults to "stl" (best for 3D printing). Returns: Task info with task_id to use with check_status and download_model.
List all available material profiles. Returns: List of all profiles with their full settings.
Recommend materials suited for a specific use case. Args: use_case: What the printed part is for (e.g. "outdoor", "flexible", "prototyping", "mechanical", "heat-resistant"). Case-insensitive. Partial matches are supported. Returns: List of matching profiles, best matches first.
Parameter 'format' in generate_model and image_to_model lacks enum constraint in schema. Description lists valid values (stl, glb, fbx, obj, usd, 3mf) but schema does not enforce them, allowing LLM to pass invalid formats.
list_materials returns all profiles without pagination. If material database grows, response could exhaust context window. No limit parameter or cursor support documented.