docgen-mcp-server について
docgen-mcp-serverは、Agent向けにHTML、Markdown、テンプレートデータからPDFを生成し、XLSXを出力してAcroForm PDFに入力するMCPサーバーです。文書をローカルでレンダリングし、ツールまたはリソースから取得できます。
主な機能
- 01HTML、Markdown、テンプレートからPDF生成
- 02複数シートのXLSX出力
- 03AcroFormフィールドの確認と入力
- 04文書IDによるファイル再取得
- 05STDIOとStreamable HTTPに対応
活用シーン
- 01テンプレートデータからPDFを生成
- 02行データをExcelブックに出力
- 03PDFフォームのフィールドを確認して入力
- 04以前生成した文書を再取得
MCP 対応
MCPサーバーとして、PDF生成、表計算ファイル出力、フォームの確認と入力を行うツールを公開します。生成ファイルは`docgen://document/{documentId}`リソースから取得できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @cyanheads/docgen-mcp-serverMCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').DOCGEN_DOCUMENT_TTL_SECONDSHow long a rendered document is retrievable before it expires, in seconds.DOCGEN_MAX_DOCUMENT_BYTESHard ceiling on a single rendered artifact in bytes; exceeding it aborts the render.DOCGEN_RENDER_TIMEOUT_MSPer-render wall-clock budget in milliseconds; exceeding it aborts the render.DOCGEN_INLINE_MAX_BYTESArtifacts at or under this byte size are returned inline as base64; larger ones omit it.DOCGEN_PDF_ENGINEPDF rendering engine. Only 'lightweight' is implemented; 'chromium' is reserved and rejected at startup.MCP_TRANSPORT_TYPESelects the HTTP transport.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_AUTH_MODEシークレットAuthentication mode to use: 'none', 'jwt', or 'oauth'.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
4掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| source | object | はい | ドキュメントのソース。次のいずれか 1 つだけを指定してください:{ html }、{ markdown }、または { template, data }。 |
| source.data | object | いいえ | `template` に挿入するキー/値データ。余分なキーは無視されます。 |
| source.html | string | いいえ | 生の HTML 文字列。呼び出し元が作成するドキュメント全体のマークアップです。 |
| source.markdown | string | いいえ | Markdown 文字列。HTML に変換してからレンダリングします。html ソースの簡易記法です。 |
| source.template | string | いいえ | `data` で埋める Handlebars 形式のテンプレート文字列。レイアウトはサーバー側で管理されます。 |
| pageOptions | object | いいえ | ページレイアウトのオプション。適切なデフォルト値が適用されます。 |
| pageOptions.size | enum | いいえ | ページサイズ。A4 | Letter | Legal | A3 | A5 |
| pageOptions.footer | string | いいえ | 任意のフッターテキスト。同じ {{page}} / {{total}} / {{date}} トークンをサポートします。 |
| pageOptions.header | string | いいえ | 任意のヘッダーテキスト。{{page}}、{{total}}、{{date}} トークンをサポートします。例:"Page {{page}} of {{total}}"。 |
| pageOptions.margin | object | いいえ | ページ余白。各辺は "10mm"、"0.5in"、"72pt" のような CSS 長さで指定します。 |
| pageOptions.margin.top | any | いいえ | 上余白。例:"10mm"。 |
| pageOptions.margin.left | any | いいえ | 左余白。例:"10mm"。 |
| pageOptions.margin.right | any | いいえ | 右余白。例:"10mm"。 |
| pageOptions.margin.bottom | any | いいえ | 下余白。例:"10mm"。 |
| pageOptions.orientation | enum | いいえ | ページの向き。portrait | landscape |
| pageOptions.pageNumbers | boolean | いいえ | true の場合、「Page N of M」フッターを自動的に描画します。 |
詳細
@cyanheads/docgen-mcp-server
HTML/Markdown を PDF にレンダリングし、行データを xlsx にエクスポートし、AcroForm PDF に入力します。MCP 経由で利用でき、STDIO または Streamable HTTP に対応しています。
概要
エージェントからドキュメントを生成します。HTML、Markdown、またはテンプレートデータを PDF にレンダリングし、行データを Excel にエクスポートして、PDF フォームに入力できます。すべての処理は同梱のスタック(pdf-lib、exceljs、marked)を使い、ローカルで行われます。
ツール
| ツール | 説明 |
|---|---|
docgen_render_pdf | HTML、Markdown、または {{key}} テンプレートとデータオブジェクトを、ダウンロード可能な PDF にレンダリングします |
docgen_export_spreadsheet | 名前付きワークシートを 1 つ以上作成し、行オブジェクトをダウンロード可能な .xlsx ブックにレンダリングします |
docgen_fill_form | 指定された PDF(base64 または https URL)の AcroForm フィールドに入力し、必要に応じてフラット化します |
docgen_list_form_fields | PDF を変更せずに、AcroForm の正確なフィールド名、型、必須フラグ、選択肢を確認します |
docgen_get_document | レンダリング/エクスポート/入力ツールが返した ID を使って、以前にレンダリングしたドキュメントを再取得します |
リソース
| リソース | 説明 |
|---|---|
docgen://document/{documentId} | ID で指定するレンダリング済みドキュメント。生バイト列を blob として、JSON メタデータブロックとともに提供します |
すべてのドキュメントデータはツール経由でも取得できます。docgen_get_document は、このリソースに対応するツールのみの機能です。
機能リファレンス
docgen_render_pdf ツール
sourceは{ html }、{ markdown }、または{{key}}の補間に使う{ template, data }のいずれか 1 つだけを指定します。pageOptionsでは、ページサイズ/向き、CSS の長さ単位による余白、ヘッダー/フッター({{page}}、{{total}}、{{date}})、ページ番号を設定できます。pageCountを含むDocumentEnvelopeを返します。degraded: trueは、CSS、画像、スクリプトが除外されたか、文字が?に置換されたことを意味します。軽量エンジンは見出し、段落、リスト、表をレンダリングします。- 型付きエラー:
invalid_source、template_render_failed、document_too_large、render_timeout。
docgen_export_spreadsheet ツール
- 一意の
name(1~31 文字)とスカラー値のrows[]を指定したシートを、少なくとも 1 つ指定してください。行が空の場合はヘッダーのみのシートになります。columns[]は省略可能で、ヘッダー、型(string/number/date/boolean)、幅、Excel の書式を指定します。 columnsを省略すると、すべての行キーが最初に出現した順に使用されます。Boolean 型の列では、大文字と小文字を区別せずtrue/1/yes/onとfalse/0/no/offを受け付けます。その他の文字列はテキストのまま扱われます。sheetCountを含むDocumentEnvelopeを返します。型付きエラー:empty_workbook、invalid_sheet_name、document_too_large、render_timeout。
docgen_fill_form ツール
sourcePdfは{ base64 }または{ url }(application/pdfを配信する公開 HTTPS URL)のいずれか 1 つだけを指定し、AcroForm の正確な大文字と小文字を区別するフィールド名を値に対応付けたfieldsを指定してください。フラット PDF または XFA のみの PDF はnot_a_formを返します。- 見慣れない PDF に入力する前に、
docgen_list_form_fieldsを使って正確な名前と選択肢を取得してください。 pageCountと、一致するフィールドのない名前を示すunmatchedFields[]を含むDocumentEnvelopeを返します。flatten: trueにすると入力済みの値が編集不可になります(デフォルトはfalse)。
docgen_list_form_fields ツール
docgen_fill_formと同じsourcePdf(base64 または URL)を受け付けます。PDF を変更したり、ドキュメントを保存したりせず、{ fields: [{ name, type, required, options? }] }を返します。- 型:
text、checkbox、dropdown、optionList、radioGroup、signature、button。optionsを含むのはdropdown、optionList、radioGroupのエントリのみです。署名とボタンは検出のみを目的とします。 - 入れ子になった名前は正確なパスを保持します。AcroForm フィールドがない PDF は
not_a_formを返します。
docgen_get_document ツール
- 以前のレンダリング/エクスポート/入力処理で返された
documentId(doc_に続く URL セーフな 24 文字)を指定してください。 - 再レンダリングせずに
DocumentEnvelopeを再取得します。期限切れまたは不明な ID はdocument_expiredを返します。
docgen://document/{documentId} リソース
- レンダリング/エクスポート/入力処理の結果から取得した
documentId(doc_に続く URL セーフな 24 文字)を使用してください。 - ドキュメントの MIME タイプを持つ base64 の
blobと JSON メタデータ(documentId、byteSize、pageCount/sheetCount、createdAt、ttlSecondsRemaining)を返します。docgen_get_documentと同じストアを読み取ります。期限切れまたは不明な ID はdocument_expiredを返します。
機能
@cyanheads/mcp-ts-core 上に構築されています。stdio および Streamable HTTP トランスポート、プラグイン可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを備えています。
docgen 固有の機能:
- 外部 API は不要です。レンダリングスタック(
pdf-lib、exceljs、marked)を同梱しているため、レンダリングはローカルで決定論的に実行され、障害が発生する可能性のある上流サービスもありません。 - 4 つのドキュメント配信ツールで共有する
DocumentEnvelopeを使用します。フィールド検査では、その一覧を直接返します。 - レンダリングには上限があります。バイト数の上限(
DOCGEN_MAX_DOCUMENT_BYTES)とタイムアウト(DOCGEN_RENDER_TIMEOUT_MS)により、処理が終わらないレンダリングをハングではなく型付きエラーにします。 - テナント単位で有効期限付きのストレージです。ドキュメント ID で解決できるのは作成したテナントのみで、ドキュメントは蓄積されずに期限切れになります。
- SSRF 対策付きのフォーム取得です。両方のフォームツールが、リダイレクトの各段階を含むすべてのアドレスを確認し、プライベート、ループバック、リンクローカルの宛先をブロックします。
エージェントに適した出力:
- 二重形式での配信です。
documentId、リソース URI、サイズ、TTL を含むすべてのエンベロープフィールドが、structuredContentと Markdown 出力の両方に含まれます。 - サイズに応じたインライン出力です。
inlineBase64が設定されるのはDOCGEN_INLINE_MAX_BYTES以下の場合のみで、それを超えるドキュメントはリソース URI 経由で配信されます。 - 部分入力の報告です。
docgen_fill_formはunmatchedFields[]を返すため、エージェントは一致しなかったフィールド名を確認できます。 - 復旧のヒントを含む型付きエラー(
invalid_source、template_render_failed、document_too_large、render_timeout、not_a_form、source_unfetchable、document_expired、…)。意味検証にはValidationError(-32007)、不正な引数にはInvalidParams(-32602)を使用します。
はじめに
以下を MCP クライアントの設定ファイルに追加してください。API キーは不要です。
{
"mcpServers": {
"docgen-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/docgen-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、npx を使用する場合(Bun は不要です):
{
"mcpServers": {
"docgen-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/docgen-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、Docker を使用する場合:
{
"mcpServers": {
"docgen-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/docgen-mcp-server:latest"
]
}
}
}
Streamable HTTP の場合は、トランスポートを設定してサーバーを起動します。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
ドキュメントは、すべてのトランスポートで docgen://document/{id} リソース(およびサイズが十分小さい場合はインライン base64)を通じて配信されます。エンベロープの downloadUrl フィールドは、将来の HTTP ダウンロードルート用に予約されており、このバージョンでは出力されません。
前提条件
- Bun v1.4.0 以降(または Node.js v24 以降)。開発には Bun v1.4.3 を使用します。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/docgen-mcp-server.git
- ディレクトリに移動します:
cd docgen-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env to override any defaults
設定
すべての設定は任意です。docgen は必須の環境変数がなくても実行できます。
| 変数 | 説明 | デフォルト |
|---|---|---|
DOCGEN_DOCUMENT_TTL_SECONDS | レンダリング済みドキュメントを取得できる有効期限を秒単位で指定します。 | 900 |
DOCGEN_MAX_DOCUMENT_BYTES | レンダリング済みアーティファクト1つあたりの最大バイト数です。超過するとレンダリングを中止します。 | 26214400 |
DOCGEN_RENDER_TIMEOUT_MS | レンダリングごとの最大実行時間をミリ秒単位で指定します。超過するとレンダリングを中止します。 | 30000 |
DOCGEN_INLINE_MAX_BYTES | このバイト数以下のアーティファクトはインラインの base64 形式で返され、それより大きいものには含まれません。 | 5242880 |
DOCGEN_PDF_ENGINE | PDF レンダリングエンジンです。実装済みなのは lightweight のみです。chromium は予約済みで、起動時に拒否されます。 | lightweight |
MCP_TRANSPORT_TYPE | トランスポートです。stdio または http を指定します。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモードです。auto、stateful、または stateless を指定します。 | stateless |
MCP_AUTH_MODE | 認証モードです。none、jwt、または oauth を指定します。 | none |
MCP_PUBLIC_URL | TLS プロキシの背後にある場合の公開オリジンです。 | — |
MCP_LOG_LEVEL | ログレベル(RFC 5424)です。 | info |
LOG_TOOL_FAILURE_PAYLOADS | 失敗した引数/結果をログに記録します。キー名によるマスキングが行われ、LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)で上限が設定されます。自由形式の値にはシークレットが残る場合があります。 | false |
STORAGE_PROVIDER_TYPE | ドキュメントのバイトデータとメタデータのストレージバックエンドです。 | in-memory |
OTEL_ENABLED | OpenTelemetry instrumentation(スパン、メトリクス、完了ログ)を有効にします。 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | OTLP のベース URL です。トレースには /v1/traces、メトリクスには /v1/metrics が使用されます。シグナル別のエンドポイントを設定すると、こちらより優先されます。 | — |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | オプトインのログ用エンドポイントです。指定した値をそのまま使用します。ベース URL を設定しても、ログのエクスポートは有効になりません。 | — |
任意のオーバーライドの全一覧は .env.example を参照してください。
デフォルトのインメモリストレージでは、再起動時にすべてのドキュメントが削除され、それ以前の ID は
document_expiredを返します。再起動後もドキュメントを保持するには、STORAGE_PROVIDER_TYPEに永続バックエンドを指定してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security, changelog sync bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t docgen-mcp-server .
docker run --rm -e MCP_TRANSPORT_TYPE=http -p 3010:3010 docgen-mcp-server
Dockerfile のデフォルトは HTTP トランスポート、ステートレスセッションモードで、ログの出力先は /var/log/docgen-mcp-server です。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツール/リソースを登録し、レンダリングとストレージの各サービスを初期化します。 |
src/config | Zod を使用した、サーバー固有の環境変数の解析と検証を行います。 |
src/mcp-server/tools | ツール定義(*.tool.ts)です。 |
src/mcp-server/resources | リソース定義(*.resource.ts)です。 |
src/services/document | レンダリングスタック(RenderService)とアーティファクトストア(DocumentStore)、共有型、SSRF フェッチガードです。 |
tests/ | src/ に対応するユニットテストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md/AGENTS.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジック内で
try/catchを使用しないでください。 - リクエストごとのログには
ctx.logを、テナントごとのストレージにはctx.stateを使用してください。 - 新しいツールとリソースは、
src/index.tsのcreateApp()配列に登録してください。 - すべての配信ツールで共有の
DocumentEnvelopeを使用します。書き込み側と読み取り側を相互に置き換えられる状態に保ってください。
コントリビューション
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。