ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Mesh2cad

โดย emirmrkaljevicรุ่น 0.23.0i★ –iรันบนเครื่อง
ชื่อใน registryio.github.emirmrkaljevic/mesh2cad

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

Mesh (STL/OBJ/PLY) to editable STEP, CadQuery, OpenSCAD or FreeCAD, with a fidelity report

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): stdio
  • หมวด: อื่น ๆ

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ต้องเตรียมก่อน

  • PyPIติดตั้ง uv ของ Python (มีคำสั่ง uvx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "mesh2cad": {
      "command": "uvx",
      "args": [
        "mesh2cad",
        "mcp"
      ]
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add mesh2cad -- uvx mesh2cad mcp

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "mesh2cad": {
      "command": "uvx",
      "args": [
        "mesh2cad",
        "mcp"
      ]
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "mesh2cad": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "mesh2cad",
        "mcp"
      ]
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub emirmrkaljevic ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด อื่น ๆi

  • ดาวมากกว่า 0% ของอีก 18354 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 100% ของอีก 18354 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 18354 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Mesh2cad ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.23.0) เข้า registry วันนี้

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Qemu MCP

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Spec Driven Development

โดย formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

รันบนเครื่อง★ 440MITอัปเดต 14 เดือนที่ผ่านมา
ติดตั้ง

Remote Desktop Commander

โดย desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

รันบนคลาวด์★ 211อัปเดต เมื่อวานซืน
ติดตั้ง

Qemu MCP

โดย 0xmortuex

Boot and drive QEMU VMs from an AI agent: keys, screenshots, serial. No guest agent.

รันบนเครื่องอัปเดต วันนี้
ติดตั้ง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

mesh2cad

If you find this useful, you can support me by getting a SkinToScan pack, my other project. It's a one-time purchase that directly funds my open-source work.

Turn 3D meshes (STL/OBJ/PLY) into real, editable CAD (STEP): fitted planes, cylinders, spheres, cones, and constant-radius fillets instead of triangle soup. CLI + MCP server for AI agents. MIT, pure Python on top of OpenCascade.

Try it in the browser: the example gallery shows four real printer parts in 3D before and after, with the STEP files and the generated CadQuery/OpenSCAD scripts to download.

*Left: 21k-triangle mesh with 0.1 mm noise. Right: the STEP mesh2cad writes: 10 planes + 2 cylinders, max deviation 0.05 mm from the true part.*

30-second quickstart

pip install mesh2cad

mesh2cad convert part.stl -o part.step --report report.md

Open `part.step` in FreeCAD, Fusion, Onshape or any CAD tool: you get real planes, cylinders and fillets you can select and dimension. `report.md` says how close the result is to the mesh, and mesh2cad falls back to faceted output instead of guessing when a fit is bad.

Using an AI agent (Claude Desktop, Cursor, any MCP client)? pip install "mesh2cad[mcp]" and add:

{ "mcpServers": { "mesh2cad": { "command": "mesh2cad", "args": ["mcp"] } } }

Proof on real parts: all 6 tested Original Prusa i3 MK3S parts convert to exact STEP, and all 6 also to an editable CadQuery, OpenSCAD, or FreeCAD script (see Real parts).

Install

pip install mesh2cad              # CLI + STEP

pip install "mesh2cad[mcp]" # + MCP server pip install "mesh2cad[cadquery]" # + run/verify generated CadQuery scripts

OpenSCAD scripts are plain text. Verifying one needs the `openscad` program ([openscad.org](https://openscad.org)); it is not a Python dependency. Without it the `.scad` file is still written.

FreeCAD macros are plain text too. Verifying one needs freecadcmd (the FreeCAD console, from freecad.org). It is not a Python dependency. Without it the .FCMacro file is still written. Ubuntu 24.04 does not ship a freecad apt package, so install the console build and put freecadcmd on PATH.

Use

mesh2cad convert part.stl -o part.step --tol 0.1 --report report.md

mesh2cad report part.stl --json

`--tol` ≈ the noise / accuracy of your mesh in model units (default 0.1 % of the bounding-box diagonal).

Output: STEP + fidelity report: method (exact / faceted-hybrid / faceted), face types, solid validity, two-sided Hausdorff / RMS deviation, volume error, % area per surface type.

Editable parametric CadQuery script

For simple prismatic parts mesh2cad can also write a CadQuery Python script where every dimension is a named parameter, so you change a number and re-run instead of editing B-rep faces:

mesh2cad convert bracket.stl --cadquery bracket.py   # add -o bracket.step to also write STEP

python bracket.py # -> bracket.step

```python

--- parameters ---

base_x = 40.0 # base length (X) base_y = 30.0 # base width (Y) base_t = 6.0 # base thickness (Z) ... hole_1_d = 6.0 # diameter hole_1_x = 0.0 hole_1_y = 0.0 hole_1_csk_d = 12.0 # countersink diameter hole_1_csk_angle = 90.0 # countersink angle

Make the hole 2 mm bigger: `mesh2cad edit bracket.py --set hole_1_d=8 --in-place -o bracket.step`, or set `hole_1_d = 8.0` and run the script yourself. A plate or block whose four vertical corners share one radius also gets `fillet_r` and `.edges("|Z").fillet(fillet_r)`, so the same edit grows the round. A quarter-torus fillet on a vertical boss or hole is a parameter of that feature: `boss_1_fillet` where a straight boss meets the top face, `hole_1_rim_r` on the top rim of a hole, `hole_1_bot_rim_r` on the bottom rim, and `hole_1_floor_r` where a blind hole's floor meets the wall. `mesh2cad edit part.py --set boss_1_fillet=3` rebuilds that round. A box with all twelve edges filleted at one radius gets `edge_fillet_r` and `.edges().fillet(edge_fillet_r)`. The box size stays `base_x`, `base_y`, and `base_t`. `mesh2cad edit part.py --set edge_fillet_r=4` rebuilds every round. An Ø8 through-hole whose wall clears those rounds is cut after the fillet (`hole_1_d` and its position). A straight boss on the top face whose wall clears those rounds is fused after the fillet (`boss_1_d`, `boss_1_h`, and its position).

A hole or boss on a side face uses the same kind of parameter. This is the block below (60×40×36, an Ø8 hole through X, an Ø6 hole 12 deep opening on +Y, an Ø10 boss 8 tall on +X):

boss_1_d     = 10.0  # diameter

boss_1_h = 8.0 # height from the +X face boss_1_y = 10.0 boss_1_z = 8.0 hole_1_d = 8.0 # diameter (axis X) hole_1_y = 0.0 hole_1_z = -6.0 hole_2_d = 6.0 # diameter (axis Y) hole_2_x = -12.0 hole_2_z = 8.0 hole_2_depth = 12.0 # blind depth from the +Y face

Set hole_1_d = 10.0 and run the script again. The volume drops by π(5²−4²)·60 mm³, the analytic change for that through hole.

A part that is one straight extrusion of a 2D outline is the same kind of script. An L, a notched plate, or a block with a slanted face, extruded along X, Y, or Z, becomes extrude_len plus an outline list. plug-aligner (the printed part in the table below, 7.3×17.7×5.5 mm) is a 5.5 mm extrusion along Z of an eight-point outline with a rectangular slot:

extrude_len = 5.5  # length along Z

extrude_0 = 0.0 # start along Z

outline in the XY plane, (x, y)

outline = [ (0.0, 0.0), (6.1, 0.0), (6.1, 6.95), (7.3, 6.95), (7.3, 10.75), (6.1, 10.75), (6.1, 17.7), (0.0, 17.7), ]

through opening in the outline

cutout_1 = [ (0.45, 1.85), (5.65, 1.85), (5.65, 15.85), (0.45, 15.85), ]

Set extrude_len = 7.5 and the part is 2 mm thicker. A corner moves when one pair in outline changes. A round through-hole on an extrusion is still hole_1_d, with hole_1_y and hole_1_z when the hole runs along X. cutout_1 is a polygonal slot that goes all the way through. An extrusion along Y stores the outline as (x, z); along X, as (y, z).

Supported: a Z-up box/plate base, rectangular pads on the top face, holes along X, Y, or Z (through, blind, countersunk when the axis is vertical, and counterbored on any of those axes), bosses along X, Y, or Z (straight, and drafted or chamfered when the axis is vertical), that one vertical corner radius, one radius on all twelve edges of a rectangular box (edge_fillet_r), a through-hole cut after that fillet when its wall clears the rounds, a straight boss fused after that fillet when its wall clears the rounds, a quarter-torus fillet on a vertical boss or hole (boss_N_fillet, hole_N_rim_r, hole_N_bot_rim_r, hole_N_floor_r), and one straight extrusion of a 2D outline along X, Y, or Z, including a polygonal through-slot and round through-holes. A counterbored hole is hole_N_d for the through diameter, hole_N_cbore_d for the large diameter, and hole_N_cbore_depth for how far that large diameter goes in from the face it opens on. A part that is a few of those extrusions is their intersection, or one of them minus straight cuts along the other axes. Two or three outlines use extrude_z_len / outline_z (and the same for X and Y); a single outline keeps extrude_len and outline. A cut is cut_1_len, cut_1_0, and cut_1. Up to four faces tilted to X, Y, and Z are planar clips (clip_1_x, clip_1_y, clip_1_z, clip_1_d). The box script is the one that is written when it already reproduces the mesh, so a plain plate stays base_x / base_y / base_t and does not become an outline list. A rectangular plate with a counterbored hole stays on those base parameters. Values are rounded to clean numbers (5.997 → 6.0) when that stays within --tol. Before writing, the script is executed and compared with the mesh (needs cadquery installed); if the part is outside this vocabulary or the script deviates, nothing is written and the command exits with code 2 and the reason. Use STEP output for everything else.

Editable parametric OpenSCAD script

The same parts can be written as OpenSCAD, which is what the 3D-printing Customizer on Thingiverse and Printables edits. Names and values match the CadQuery script. --openscad and --cadquery can be combined, and -o still writes STEP.

mesh2cad convert plate.stl --openscad plate.scad

openscad -o plate.stl plate.scad

A 40×30×6 plate with a Ø10 hole comes out as below, plus a short header. Before:
// --- parameters ---

/* [Base] */ // base length (X) base_x = 40.0; // base width (Y) base_y = 30.0; // base thickness (Z) base_t = 6.0; base_cx = 0.0; base_cy = 0.0; // bottom face height base_z0 = -3.0;

/* [Holes] */ // diameter hole_1_d = 10.0; // [0.2:0.1:30] hole_1_x = 0.0; hole_1_y = 0.0;

/* [Hidden] */ $fn = 96; // circle segments

// --- model --- module mesh2cad_part() { difference() { translate([base_cx, base_cy, base_z0 + base_t / 2]) cube([base_x, base_y, base_t], center=true); translate([hole_1_x, hole_1_y, base_z0 - 1]) cylinder(h=base_t + 2, d=hole_1_d); } }

mesh2cad_part();

After, the hole is 2 mm bigger: one number changes, then re-render:

hole_1_d = 12.0; // [0.2:0.1:30]

Re-render (F6) and export STL. A drafted boss is a cylinder with r1/r2, a chamfer or countersink is the same, and the four vertical corners of a rectangular base are offset(r=fillet_r) on a smaller square, then extruded. A box with every edge rounded is edge_fillet_r: three cubes for the flat faces, twelve cylinders for the edges, and eight spheres for the corners. A through-hole that clears those rounds is a cylinder subtracted after that union. A boss that clears those rounds is a cylinder added after that union. A boss-base fillet, a hole-rim round, and a blind-floor fillet are a rotate_extrude() of a square with a quarter circle taken out of it, using boss_1_fillet, hole_1_rim_r, or hole_1_floor_r. The profile overlaps the sharp solid by 0.02 mm so the union stays closed. A hole or boss whose axis is X or Y is the same cylinder, turned with rotate so it points along that axis; its parameters are the diameter and the two coordinates of the axis (hole_1_y / hole_1_z for an X hole). A straight extrusion is linear_extrude(extrude_len) of polygon(outline), with polygon(cutout_1) subtracted in 2D when the outline has a slot. An extrusion along Y or X is that solid turned so the outline sits in the XZ or YZ plane. A counterbored hole is a secon

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx