Zod 기반의 타입 안전하고 손실 없는 스키마를 사용하여 OOXML, OpenDocument, Markdown, EPUB, PDF 형식 간의 변환을 수행합니다.
다른 이름 ExaDev/documents.js, documents-js, document-mcp
- 스타
- 2
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 12일
- 라이선스
- MIT
documents.js MCP란?
documents.js은(는) MCP server입니다. Zod 기반의 타입 안전하고 손실 없는 스키마를 사용하여 OOXML, OpenDocument, Markdown, EPUB, PDF 형식 간의 변환을 수행합니다.
프로젝트 README에서 생성된 요약
documents.js MCP server 정보
이 MCP server는 개발자가 OOXML, OpenDocument, Markdown, EPUB, PDF와 같은 복잡한 문서 형식 간의 변환을 수행할 수 있도록 지원합니다. 공유된 Zod 기반 스키마를 사용하여 다양한 파일 형식 간의 문서 변환 시 데이터 손실이 없고 타입 안전성을 유지하도록 합니다. 이를 통해 docx, pptx, xlsx, odt, ods, odp와 같은 형식 간에 고정밀 데이터 이동이 가능합니다.
사용자는 MCP client를 통해 서버와 상호작용하며, document-compute.js 패키지의 compute_formula와 같은 특정 도구를 사용하여 수학식을 계산할 수 있습니다. 시스템은 모듈형 아키텍처로 구축되어 있으며, 중앙 스키마 레이어가 플랫 콘텐츠와 트리 형태 문서 간의 구조적 변환을 처리합니다. 공통 스키마를 기반으로 하므로 변환 과정에서 다양한 미디어 유형에 걸쳐 구조적 무결성을 유지합니다.
서버를 설정하려면 Node 24와 pnpm이 필요합니다. 표준 작업에는 환경 변수가 필요하지 않지만, 특정 테스트 모드에서는 로컬 일치 코퍼스(conformance corpora)가 필요할 수 있습니다. 이 서버는 기본적인 Markdown부터 복잡한 Excel 숫자 형식 분류 및 임베디드 객체에 대한 재귀적 아카이브 탐지까지 모든 과정을 처리합니다.
활용 사례
- 1오피스 문서를 Markdown으로 변환문서화 목적으로 docx 또는 odt 파일을 깔끔한 Markdown 형식으로 변환합니다.
- 2스프레드시트 형식에서 데이터 추출숫자 셀이 통화, 백분율 또는 날짜로 형식 지정되었는지 정확하게 식별하면서 xlsx 또는 ods 파일을 처리합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
documents.js MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 documents.js MCP 설치
$ claude mcp add documents-js -- npx -y document-mcpCursor에 documents.js MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"documents-js": {
"command": "npx",
"args": [
"-y",
"document-mcp"
]
}
}
}VS Code에 documents.js MCP 설치
.vscode/mcp.json
{
"servers": {
"documents-js": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"document-mcp"
]
}
}
}VS Code CLI에 documents.js MCP 설치
$ code --add-mcp '{"name":"documents-js","type":"stdio","command":"npx","args":["-y","document-mcp"]}'Claude Desktop에 documents.js MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"documents-js": {
"command": "npx",
"args": [
"-y",
"document-mcp"
]
}
}
}Codex에 documents.js MCP 설치
$ codex mcp add documents-js -- npx -y document-mcpCodex config.toml에 documents.js MCP 설치
~/.codex/config.toml
[mcp_servers.documents-js] command = "npx" args = ["-y", "document-mcp"]
Gemini CLI에 documents.js MCP 설치
$ gemini mcp add -s user documents-js npx -- -y document-mcpGemini settings.json에 documents.js MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"documents-js": {
"command": "npx",
"args": [
"-y",
"document-mcp"
]
}
}
}자동 검사
2026년 11월 14일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능exadev/documents.js is public and reachablegithub.com/exadev/documents.js ↗통과
- 패키지가 이 저장소를 소스로 명시document-mcp names exadev/documents.js as sourcenpmjs.com/package/document-mcp ↗통과
- 빌드 출처(Sigstore 증명)Sigstore attestation for document-mcpnpmjs.com/package/document-mcp/v/4.14.229#provenance ↗통과
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-12github.com/exadev/documents.js ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음No popular package one edit away from document-mcp통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기documents.js
A family of independent, MIT-licensed TypeScript packages for lossless, type-safe document conversion — OOXML (docx/pptx/xlsx), OpenDocument (odt/ods/odp), Markdown, EPUB, and PDF — sharing a common Zod-based schema layer, plus the CLI, MCP server, and web UI built on top of them.
This repository is a pnpm workspace: one repository, one lockfile, one CI pipeline, and one release run, holding every package in the family under packages/. Each package keeps its own version, its own changelog, its own npm release cadence, and its own README — consolidating the repositories did not merge the packages into one artifact, and there is no lockstep version shared between them. What is shared is everything that was previously copied: the workspace settings, the task pipeline, the git hooks, commit-message validation, dependency automation, and the release orchestration.
Getting started
Node 24 (pinned in .tool-versions) and pnpm (the version pinned as packageManager in the root package.json) are the only prerequisites; corepack resolves the latter automatically. pnpm install resolves and links every package in one pass — there is no per-package install step.
No environment variable is required for a normal build/lint/test run. documents.js's examples suite regenerates its fixtures only when GENERATE_EXAMPLES is set; pnpm test:corpus additionally expects the gitignored real-world conformance corpora to already be present locally (see each codec's own README for what it checks against).
Packages
The packages layer from foundation up to user-facing interfaces. Each depends only on the layers below it.
Foundation
| Package | What it is |
|---|---|
document-schema.js |
The canonical, format-agnostic content and document-tree schema shared by every codec, plus the structural transform between them (decompose/flattenTree/factorStyles/assembleTree, converting a flat ContentDocument to and from the tree-form DocumentTree). Free of any format-specific or I/O behaviour: the transform lives here because every codec depends on this package and none of them depends on documents.js, so it is the only layer a codec can reach to expose DocumentTree publicly without a dependency cycle. |
byte-codec |
Generic byte-level primitives (ByteWriter, ByteReader, CRC-32, deflate/inflate, base64) and PNG/JPEG image encoding and decoding, with zero knowledge of any document format. The base64 pair is the one every codec shares for an image payload or a data: URI, so no codec carries its own. |
document-outline.js |
Utilities for consumers holding a tree-form DocumentTree: the TOC outline projection, effective-property resolution, and the flatten/leaf-text/stable-hash helpers. Depends on the schema alone, and is consumed by the interface packages rather than by the codecs. |
archive-codec |
Recursive archive (ZIP-in-ZIP) detection and walking with depth and cumulative decompressed-size guards, plus bounded classic OLE compound-file ([MS-CFB]) reading, conformant [MS-CFB] writing, and OLE Package stream reading and writing — zero document-format knowledge. Consumed by ooxml.js, whose pptx (p:oleObj) and docx (o:OLEObject) OLE reading detects a ZIP-payload embedded object through it and decodes the nested package as a content document, and unwraps the classic .bin compound-file spelling through its CFB reader to the same nested decode; the writer is the container the legacy binary codecs need before any of them can gain a write path, and rtf-codec builds its own Package-stream-wrapped embedded objects through the identical pair. |
document-compute.js |
Units-typed evaluation over the schema's MathExpression: evaluate() for point values and bounded intervals through one interpreter with exact-rational unit conversion, plus solveFor() numeric root-finding on one unknown. Depends on the schema alone; consumed by document-mcp's compute_formula tool, not by any codec or the conversion engine. |
excel-number-format |
A tokenizing classifier for Excel's number-format mini-language (ECMA-376 Part 1 §18.8.30, which BIFF8's [MS-XLS] 2.4.126 defers to): deciding whether a numeric cell's format code says percentage, currency, date, time, elapsed duration, or plain number. No document-format knowledge of its own; shared by ooxml.js's xlsx support and xls-codec's BIFF8 reading, since the two formats inherit the identical mini-language. |
Format codecs
Each converts one document format to and from the shared schema, built on document-schema.js:
| Package | Formats |
|---|---|
ooxml.js |
OOXML packages (docx, pptx, xlsx) to and from JSON. |
odf.js |
OpenDocument packages (odt, ods, odp, odg) to and from JSON, plus read and write support for the pre-OASIS OpenOffice.org 1.x documents ODF was based on (sxw, sxc, sxi, sxd). |
markdown-codec |
CommonMark+GFM to and from the shared content schema. |
pdf-codec |
Parses arbitrary real-world PDFs and generates new ones, also depending on byte-codec. |
epub-codec |
Flowable EPUB 2/3 to and from the shared content schema; writes EPUB 3 only. |
rtf-codec |
Rich Text Format to and from the shared content schema; hand-written tokenizer, destination state machine, and header-table parsers, since RTF is tokenised text rather than XML, also depending on archive-codec for the [MS-CFB] container an embedded object's \objdata carries. |
wpd-codec |
WordPerfect 6.x-X6 (.wpd) to the shared content schema; read-only, and under active development. |
doc-codec |
The pre-2007 Word Binary File Format (.doc, [MS-DOC]) to and from the shared content schema, also depending on archive-codec for its [MS-CFB] container; write support covers character/paragraph formatting (including numbered/bulleted lists and named styles), multiple sections, tables, cell decoration, PNG/JPEG inline images, page breaks, footnote/endnote/comment bodies and header/footer stories, and metadata, with style-inherited formatting, note references, embedded objects, and construct-boundary markers still gaps — see the package's own README for its exact scope. |
xls-codec |
Legacy Excel Binary File Format (.xls, BIFF8) to and from the shared content schema, also depending on archive-codec for its [MS-CFB] container; write support covers cell values, merges, row/column sizing, number formats, cell background/border decoration, cell alignment, print settings, same-sheet formulas, and images/embedded objects (charts excepted), with per-cell fonts and defined names the remaining permanent gaps — see the package's own README for its exact scope. |
ppt-codec |
PowerPoint 97-2003 binary presentations (.ppt, [MS-PPT]) to and from the shared content schema, also depending on archive-codec for its [MS-CFB] container and byte-codec for OLE-storage decompression; the write side covers text-box, picture, and table shapes with rotation and per-shape text insets, OLE-embedded objects are detected and linked both ways through an injected serialise/decode port pair (this single-format package depends on no sibling codec to turn an embedded object's own nested content into bytes or back), and both directions remain under active development. |
Rendering backends
| Package | What it is |
|---|---|
pdf-raster-cpu |
The pure-software reference implementation of pdf-codec's PageRasteriser port: renders a PDF page, or one located region of one, to PNG bytes with a scanline rasteriser that has no canvas dependency, so it runs identically under Node, a browser Worker, and workerd. pdf-codec defines the port and deliberately picks no implementation, so a runtime with a real canvas can supply its own backend instead. |
Conversion engine
| Package | What it is |
|---|---|
documents.js |
Bidirectional docx/pptx to and from PDF conversion, and a read+write editable OOXML document model, built on ooxml.js and depending on every write-capable codec above, including doc-codec/xls-codec/ppt-codec, plus wpd-codec as a read-only conversion source (routable everywhere but never a target, since wpd-codec ships no writer). |
Operations
| Package | What it is |
|---|---|
document-operations |
The canonical set of document-conversion, editing, inspection, and .odb operations documents.js exposes — one Zod input/output schema and one transport-agnostic run() function per operation, built on documents.js, document-outline.js, document-compute.js, and document-schema.js. document-mcp and document-rest each register every operation as a tool/route rather than defining their own copy; document-cli's own flag parsing is meant to consume the identical registry too. |
Interfaces
Each exposes the conversion engine through a different surface:
| Package | Surface |
|---|---|
document-cli |
CLI and interactive Ink TUI covering every docx/pptx/odt/odp/ods/odg/odf/pdf/odm/odb/xlsx/markdown conversion, bridge, and editor as a scriptable command or a terminal app. |
document-mcp |
MCP server exposing the conversion, .odb, metadata, font, and paragraph-editing tooling as MCP tools, dispatching to document-operations for the actual implementation of each one. |
document-rest |
A plain REST API server exposing every document-operations operation as a JSON-over-HTTP POST route, for a caller with no MCP client and no Node runtime of its own. |
web |
Client-only, statically-built web UI for every conversion and editing tool in the ecosystem, also depending directly on markdown-codec. The one package here that is never published: it deploys to GitHub Pages instead. |
documents.js MCP 질문
documents.js MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add documents-js -- npx -y document-mcp를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
documents.js MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
실행을 위해 필요한 환경 변수가 있나요?
일반적인 빌드, 린트 또는 테스트 실행에는 필요한 환경 변수가 없습니다.
documents.js를 사용하기 위한 전제 조건은 무엇인가요?
패키지를 사용하려면 Node 24와 pnpm이 설치되어 있어야 합니다.