3D Point Cloud(
.ply/.pcd)를 자연어로 질의하는 MCP 서버. "3D 데이터를 LLM이 다루게 한다"는 아이디어를 open3d로 구현한 포트폴리오 데모. 3D Computer Vision(MVSNet·ICP·Point Cloud) 경험과 LLM/MCP 툴링을 결합한 차별화 프로젝트.
아래 이미지는 2026-07-14에 클린 Python 3.12 가상환경에서 MCP stdio 연결 후
tools/list와 describe_pointcloud를 실제 호출한 결과입니다.
| 검증 | 결과 |
|---|---|
pip install -e ".[dev]" |
통과 (Python 3.12.11) |
python -m pytest -q |
1 passed |
| MCP initialize · tools/list | 통과 — 3 tools |
describe_pointcloud 호출 |
통과 — 합성 PLY 1,000 points |
현재 Open3D macOS wheel 호환성을 기준으로 Python 3.10–3.12를 지원합니다.
3D 재구성·정렬을 실무에서 다뤄온 엔지니어가, 그 도메인을 LLM 도구 생태계(MCP)에 노출하면 어떤 일이 가능한지 보여주기 위한 데모입니다. LLM 클라이언트가 3D 파일의 기하 속성을 이해하고, 평면을 검출하고, 두 스캔을 정렬(ICP)하도록 합니다.
| 도구 | 설명 |
|---|---|
describe_pointcloud(path) |
점 개수·bounding box·centroid 등 요약 |
detect_plane(path) |
RANSAC으로 지배적 평면(바닥/벽) 검출 |
align(path_a, path_b) |
두 Point Cloud를 ICP로 정렬, fitness/RMSE 반환 |
python3.12 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]" # open3d, numpy, mcp, pytest
# 샘플 Point Cloud 생성 (바닥 평면 + 벽, ICP용 이동본)
python data/make_sample.py
# MCP 없이 바로 테스트
python -m src.cli describe data/scan_a.ply
python -m src.cli plane data/scan_a.ply
python -m src.cli align data/scan_a.ply data/scan_b.ply
# 단위 테스트
python -m pytest -q{
"mcpServers": {
"pointcloud": {
"command": "python",
"args": ["/absolute/path/to/pointcloud-mcp/server.py"]
}
}
}예: "scan_a.ply의 점이 몇 개고 바닥 평면은 어디야?" → describe_pointcloud + detect_plane 호출
Python · open3d · NumPy · MCP
data/make_sample.py가 생성하는 합성 Point Cloud. 외부/회사 데이터 없음.
실제 데이터로 쓰려면 Stanford Bunny, ScanNet 샘플 등 공개 데이터셋을 넣으면 됩니다.
MIT
