순수 러스트 PDF 엔진 PaperPilot이 MCP와 WASM으로 로컬 처리한다
PaperPilot은 PDF와 문서를 다루는 툴킷을 순수 러스트로 구현한 오픈소스 프로젝트다. 핵심은 하나의 엔진을 여러 실행 형태로 노출한다는 점이다. CLI, MCP 서버, REST 게이트웨이, 브라우저에서 도는 WASM 모듈, Tauri와 Svelte로 만든 데스크톱 GUI가 모두 같은 러스트 코어를 공유한다. 처리 과정에서 파일이 외부로 전송되지 않고, 사용자의 머신이나 브라우저 탭 메모리 안에서 끝난다.
가장 눈에 띄는 접점은 MCP다. 릴리스에서 paperpilot-mcp 바이너리를 받아 claude_desktop_config.json의 command 항목에 경로를 넣고 재시작하면, Claude Desktop이나 Cursor 같은 MCP 클라이언트에서 자연어로 PDF 병합과 압축을 지시할 수 있다. CLI도 같은 기능을 노출한다. merge, compress, rotate 같은 하위 명령에 입력·출력 파일과 품질, 페이지 범위, 회전 각도를 인자로 넘기는 방식이다. REST로 쓰려면 localhost:7823에 요청을 보내면 되고, /docs 경로에서 Swagger 문서를 확인할 수 있다. Python, Node, n8n 같은 외부 도구에서 로컬 HTTP 호출로 붙일 수 있다는 뜻이다.
기능은 크게 네 갈래다. 정리 쪽은 병합, 분할, 회전, 페이지 삭제·재배열·추출, 소책자 imposition, N-up 그리드를 지원한다. 추출 쪽은 일반 텍스트 뽑기와 OCR을 제공하는데, OCR은 rten을 통해 순수 러스트로 구현한 PaddleOCR를 쓴다. 보안 쪽에는 워터마크, 서명 검증과 제거, PII 스캔, 딥 새니타이즈가 들어 있다. 오피스 데이터로는 Excel을 JSON이나 CSV로 변환하는 기능이 포함된다.
앞으로의 계획도 공개돼 있다. v0.7에서 PDF와 Markdown·HTML·JSON 간 변환을, v0.8에서 PDF를 Word·Excel·PowerPoint로 내보내는 기능을 목표로 한다. v0.9는 암호화·복호화·서명·redact·폼·주석, v1.0은 렌더링·flatten·복구·비교·PDF/A·Bates numbering을 다룬다. 현재 저장소에는 paperpilot-core, paperpilot-pdf, paperpilot-nlp, paperpilot-gateway, paperpilot-mcp, paperpilot-wasm, paperpilot-storage 크레이트가 나뉘어 있고, lopdf와 pdf_oxide, rten 등이 기반 라이브러리로 쓰인다.
배경에는 PDF 처리 생태계의 오랜 무게가 있다. 브라우저에서 PDF를 다루려면 보통 Chromium을 끌어와야 하고, 서버에서 처리하려면 C++ 런타임이나 클라우드 API에 의존하는 경우가 많았다. 계약서나 개인정보가 섞인 문서를 클라우드로 올리기 어려운 조직은 이런 선택지가 사실상 막혀 있었다. MCP가 에이전트와 로컬 도구를 잇는 통로로 자리 잡으면서, 문서 처리기를 에이전트 옆에 로컬로 붙이려는 수요와 맞물린다.
개발자 입장에서 달라지는 지점은 통합 비용이다. 같은 코어가 CLI, MCP, REST, WASM, 데스크톱으로 나뉘어 있으므로, 자동화 파이프라인에는 REST를, 사내 데스크톱에는 Tauri 앱을, 에이전트에는 MCP를 붙이면서 동작 차이를 걱정할 필요가 줄어든다. 웹사이트에 넣는 용도로는 embed.js 스크립트와 data-tools 속성으로 병합·압축·OCR 위젯을 삽입하는 방식도 제공된다. 빌드는 Rust 1.75 이상과 Node.js, pnpm이 필요하고, cargo로 CLI·MCP·게이트웨이를 릴리스 빌드한 뒤 apps/desktop에서 tauri dev를 돌리는 흐름이다.
전제도 분명하다. 이 저장소의 커뮤니티 에디션은 Apache 2.0으로, CLI와 MCP 서버, REST 게이트웨이, WASM 엔진, 데스크톱 앱을 포함한다. SSO, RBAC, 감사 로그, DLP가 들어간 엔터프라이즈 에디션은 별도로 개발된다. 성능은 cargo bench --workspace로 재현할 수 있고 SYSTEM_BENCHMARK_REPORT.md에 방법론과 결과가 정리돼 있다고 안내하지만, 이번 자료에는 구체적인 수치가 제시되지 않았다.