Enterprise エディション
MCP ツール
NextPDF Enterprise は NextPDF Connect サーバーに 11 個の MCP ツールを追加します。これらは AI アシスタントやエージェントフレームワークに、Enterprise エンジンへの直接的で型付けされたアクセスを提供します。すなわち、コンプライアンスポリシーチェック、PDF フォレンジック、LTV ヘルスチェック、AI レディネススタンプ、AST 対応チャンク化、RAG の取り込みと検索です。すべてのツールは自身のリスクレベルと読み取り専用の姿勢を宣言するため、MCP ホストはエージェントの活動を確信をもってゲート、ログ記録、監査できます。障害が例外として表面化することは決してなく、エージェントは常に構造化されパース可能な結果を受け取ります。
提供とライセンス
「提供とライセンス」という見出しのセクションこの機能は NextPDF Enterprise(nextpdf/enterprise)で提供され、Enterprise ティアのライセンスエンベロープで有効化されます。その権限のないデプロイメントでは、この機能のクラスはロードされません。エディションを比較してライセンスを取得する。
インストール
「インストール」という見出しのセクションcomposer require nextpdf/enterprise:^3MCP ホスト自体は NextPDF Connect で、nextpdf/server パッケージで提供されます。Connect のインストールを参照してください。両方のパッケージが存在すると、サーバーのツールレジストリが NextPDF\Enterprise\McpToolProvider を自動的に検出し、11 個の Enterprise ツールを登録します。配線コードは不要です。nextpdf/server が存在しない場合、プロバイダーファイルは早期に return し、何もロードされません。
バッチおよび RAG ツールは追加で Spectrum サイドカーを必要とします。NextPDF\Enterprise\Mcp\SpectrumClientFactory が読み取る環境変数で設定します。すなわち SPECTRUM_URL(デフォルト http://127.0.0.1:7800)、SPECTRUM_TIMEOUT(デフォルト 30.0 秒)、SPECTRUM_AUTH_TOKEN、SPECTRUM_APP_SECRET です。
概念的な概要
「概念的な概要」という見出しのセクションModel Context Protocol(MCP)は、AI アシスタントやエージェントフレームワークがサーバーの公開する型付けツールを呼び出せるようにするオープンプロトコルです。PDF バイト列をプロンプトに貼り付けて期待するのではなく、エージェントは JSON スキーマで検証されたペイロードとともに名前付きツールを呼び出し、決定論的で構造化された結果を受け取ります。NextPDF Connect は PDF 向けのそのサーバーであり、Enterprise パッケージは以下のツールでそのカタログを拡張します。各ツールは、あなたの PHP コードが直接呼び出すのと同じ Enterprise API の薄いラッパーであるため、エージェント実行のチェックとコード実行のチェックは同じ判定を生み出します。
ツールカタログ
「ツールカタログ」という見出しのセクション| MCP ツール | クラス | 機能 | リスク | 読み取り専用 |
|---|---|---|---|---|
compliance_check | ComplianceCheckTool | 1 つの PDF を名前付きポリシーに対して検証。pdfa4、pdfa4e、pdfa4f、pades-baseline、ltv-health、eidas-qualified、zugferd、fda-part11、および 4 つの sec-17a4 バリアント。 | Review | yes |
batch_compliance_check | BatchComplianceCheckTool | 多数の PDF を pdfa、pades、または zugferd ポリシーに対して 1 回の Spectrum サイドカーバッチでチェック。 | Safe | yes |
forensic_analyze | ForensicAnalyzeTool | 改ざん検出のためのリビジョン履歴、増分更新、変更イベントを報告。 | Safe | yes |
batch_forensic_analyze | BatchForensicAnalyzeTool | 多数の PDF に対するフォレンジック分析を 1 回のサイドカーバッチで実行。 | Safe | yes |
ltv_health_check | LtvHealthCheckTool | 署名済み PDF の長期検証マテリアル(DSS ディクショナリ、OCSP レスポンス、CRL エントリ、VRI エントリ、証明書ストア)をチェック。 | Safe | yes |
ai_ready_certify | AiReadyCertifyTool | 4 つの基準(フォレンジック完全性、署名の有無、LTV の有効性、暗号化なし)に対する読み取り専用の製品定義 AI レディネス判定。 | Review | yes |
certify_ai_ready | CertifyAiReadyTool | 3 つの基準(読み取り専用ツールの 4 つからフォレンジック完全性を除いたもの。このツールはスタンプするファイルを書き換えるため設計上そうなっている)に対する製品定義のレディネス判定を行い、XMP プロベナンススタンプを追加。スタンプ済み PDF を base64 で返す。 | Review | no |
ast_aware_chunk | AstAwareChunkTool | PDF を見出し境界に沿って引用アンカー付きチャンクに分割。チャンクごとにノード ID、ページインデックス、バウンディングボックスを付与。 | Review | yes |
audit_ast_mutations | AuditAstMutationsTool | SHA-256 ソースハッシュでドキュメントの AST ミューテーション監査証跡を取得。 | Review | yes |
embed_documents | EmbedDocumentsTool | PDF を RAG コレクションに取り込む。パース、チャンク化、埋め込み、インデックス化。コレクション状態を変更する。 | Caution | no |
search_documents | SearchDocumentsTool | 取り込み済みコレクションに対するハイブリッド検索(BM25 キーワードとセマンティック)。ランク付け・スコア付けされたチャンクを返す。 | Safe | yes |
「certify」ツールは製品定義のレディネス判定(certified、partial、または not_certified)を発行します。この判定は技術的なチェック結果であり、いかなる認定機関による認証でもありません。
承認ゲートと監査姿勢
「承認ゲートと監査姿勢」という見出しのセクションすべてのツールは、Connect の 4 ティアモデルからリスクレベルを宣言します。Safe ツールは自動実行します。Caution ツールは監査ログエントリとともに自動実行します。Review ツールは呼び出し側エージェントの指示に対する警告を伴います。ApprovalRequired ツールは人間の確認を要求します。破壊的なツールが存在しないため、現在このレベルを宣言する Enterprise MCP ツールはありません。ランタイム設定はツールのリスクレベルを引き上げることしかできず、決して引き下げられません。ツールは MCP 挙動アノテーション(readOnlyHint、idempotentHint)も公開するため、準拠クライアントは独自のゲートをその上に適用できます。完全なモデルについては HITL リスクティアを参照してください。
なぜこの仕組みなのか
「なぜこの仕組みなのか」という見出しのセクションこの設計の要となる決定は、ツールが自己宣言型のガバナンスを備えた薄い決定論的ラッパーであることです。各ツールは自身のリスクレベルとティアをドメイン不変条件として述べ、名前空間やパッケージ構成から推論することはありません。これにより、トランスポートを信頼することなく、ホストにおいてゲート判断を監査可能に保ちます。ツールは独自のドキュメントインテリジェンスを一切持たず、あなたのコードが呼び出すのと同じ Enterprise API に委譲するため、テストすべき挙動は 1 つ、信頼すべき判定は 1 つだけです。エラーは例外として抜け出すのではなく MCP エラーチャネルで返されます。エージェントは PHP 例外をキャッチできませんが、常に isError で分岐できるからです。ファイルシステムに触れうる入力はデフォルトでフェイルクローズです。MCP 引数は定義上、攻撃者が到達可能だからです。
設計の背景:推測を拒む API。
API サーフェス
「API サーフェス」という見出しのセクション11 個すべてのツールは nextpdf/server の NextPDF\Server\Tools\ToolInterface コントラクトを実装し、同じ公開サーフェスを共有します。以下のシグネチャは代表として NextPDF\Enterprise\Mcp\ComplianceCheckTool に対して一度だけ示します。
public function name(): stringpublic function description(): stringpublic function inputSchema(): arraypublic function annotations(): arraypublic function riskLevel(): RiskLevelpublic function tier(): ToolTierpublic function category(): stringpublic function execute(array $arguments, InMemoryDocumentStore $store): ToolResultスロー/失敗する条件:execute() は決してスローしません。内部で Throwable をキャッチし、isError = true の ToolResult::error() を返します。無効な引数(workspace_token の欠落、不正な documents エントリ、未知の document_id、安全でない source)は、そのエラーチャネル上で InvalidArgumentException メッセージとして表面化します。
監査証跡ツールは、そのストレージバックエンドをコンストラクタインジェクションで受け取ります。
public function __construct(private readonly AstAuditTrailInterface $auditTrail)カタログを登録するプロバイダー:
public function getTier(): stringpublic function getTools(): arraygetTier() は 'enterprise' を返します。getTools() は 11 個のツールインスタンスを返します。audit_ast_mutations はデフォルトで NextPDF\Enterprise\Ast\InMemoryAstAuditTrail に配線されています。
Spectrum サイドカークライアントファクトリ。これは PSR-17 リクエストおよびストリームファクトリでもあります。
public static function create(): SpectrumClientpublic static function reset(): voidpublic function createRequest(string $method, $uri): RequestInterfacepublic function createStream(string $content = ''): StreamInterfacepublic function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterfacepublic function createStreamFromResource($resource): StreamInterfaceスロー/失敗する条件:create() は、SPECTRUM_URL が不正な場合、または設定されたエンドポイントが既知のプライベートまたは予約済みアドレス(localhost を除く)を対象とする場合に InvalidArgumentException をスローします。これは設定時のゲートであり、ネットワーク層の制御ではありません。ホスト環境ではエグレスポリシー、リダイレクト処理、DNS ピンニングを引き続き強制してください。createStreamFromFile() は、ファイルを開けない場合に NextPDF\Enterprise\Mcp\McpStreamException(PSR-17 コントラクトに従い RuntimeException のサブクラス)をスローします。
コードサンプル — クイックスタート
「コードサンプル — クイックスタート」という見出しのセクションインメモリの data: URI チャネルを使用して、エージェントが行うのと全く同じように PDF/A-4 コンプライアンスチェックを実行します。
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Mcp\ComplianceCheckTool;use NextPDF\Enterprise\Mcp\McpStreamException;use NextPDF\Enterprise\Mcp\SpectrumClientFactory;use NextPDF\Server\Document\InMemoryDocumentStore;
$streams = new SpectrumClientFactory(); // PSR-17 stream factory from this module
try { $pdfBytes = (string) $streams->createStreamFromFile(__DIR__ . '/invoice.pdf');} catch (McpStreamException $e) { fwrite(STDERR, 'Cannot read PDF: ' . $e->getMessage() . PHP_EOL); exit(1);}
$tool = new ComplianceCheckTool();$result = $tool->execute( [ 'source' => 'data:application/pdf;base64,' . base64_encode($pdfBytes), 'policy' => 'pdfa4', ], new InMemoryDocumentStore(),);
// Tool failures arrive on the MCP error channel, never as exceptions.if ($result->isError) { fwrite(STDERR, $result->content[0]['text'] . PHP_EOL); exit(1);}
echo $result->content[0]['text'] . PHP_EOL;適合ファイルに対する期待出力(検出件数はドキュメントごとに異なります):
Compliance check (PDF/A-4): PASS — 0 finding(s)指摘ごとの重大度、ルール ID、条項、提案を含む完全な機械可読レポートは $result->structured で利用できます。
コードサンプル — 本番
「コードサンプル — 本番」という見出しのセクションサイドカーをプリフライトし、宣言されたリスク姿勢を強制したうえで、バッチコンプライアンスチェックを実行します。
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Mcp\BatchComplianceCheckTool;use NextPDF\Enterprise\Mcp\SpectrumClientFactory;use NextPDF\Server\Document\InMemoryDocumentStore;
// 1. Fail fast on sidecar misconfiguration before accepting agent traffic.// The factory validates SPECTRUM_URL and rejects private/reserved targets.try { SpectrumClientFactory::create();} catch (InvalidArgumentException $e) { fwrite(STDERR, 'Spectrum sidecar rejected: ' . $e->getMessage() . PHP_EOL); exit(1);}
$tool = new BatchComplianceCheckTool();$risk = $tool->riskLevel();
// 2. Enforce the declared risk posture before execution.if ($risk->requiresHumanConfirmation()) { // Route to your approval queue instead of executing. exit(0);}
if ($risk->requiresAuditLog()) { error_log(sprintf('[mcp-audit] tool=%s risk=%s', $tool->name(), $risk->label()));}
// 3. Execute the batch.$result = $tool->execute( [ 'workspace_token' => (string) getenv('SPECTRUM_WORKSPACE_TOKEN'), 'documents' => [ ['id' => 'contract-001', 'path' => '/var/pdf-inbox/contract-001.pdf'], ['id' => 'contract-002', 'path' => '/var/pdf-inbox/contract-002.pdf'], ], 'policies' => ['pdfa', 'pades'], ], new InMemoryDocumentStore(),);
echo $result->content[0]['text'] . PHP_EOL;期待出力(件数はあなたのドキュメントを反映します):
Batch compliance check complete: 1 compliant, 1 non-compliantエッジケースと落とし穴
「エッジケースと落とし穴」という見出しのセクション- ファイルシステムの
sourceパスはデフォルトで無効です。NEXTPDF_MCP_INPUT_DIR環境変数がないと、パス形式のsourceはエラー結果とともに拒否されます。代わりにdocument_id、data:URI、または生の base64 を使用してください。 - 生の base64 は 256 文字を超える場合のみ認識されます。 より短い base64 ブロブはファイルパスとして扱われ、拒否されます。小さいペイロードは
data:application/pdf;base64,URI で包んでください。 - 未知の
document_id値はガイダンスとともに失敗します。 エラーテキストはUnknown document_id: ... Call create_pdf first.です。インメモリストア内のドキュメントはストアの TTL でも期限切れになるため、古い ID は同様に失敗します。 compliance_checkは未知のポリシーキーを拒否し、サポートされるセットをエラーメッセージに列挙します。- バッチおよび RAG ツールはサイドカーを必要とします。
batch_compliance_check、batch_forensic_analyze、embed_documents、search_documentsは、到達可能な Spectrum エンドポイントとworkspace_tokenを必要とします。ファクトリはプロセスごとに 1 つのクライアントをキャッシュします。テストではSpectrumClientFactory::reset()を呼び出してください。 search_documentsはtop_kを 1〜100 にクランプします。 整数でない値はサーバーのデフォルトである 10 にフォールバックします。ast_aware_chunkのデフォルトはチャンクあたり 1500 文字、オーバーラップ 150 文字です。certify_ai_readyはスタンプ済みバイト列を省略します。return_stamped_pdfがfalseの場合、または判定がnot_certifiedの場合です。存在する場合、base64 ペイロードは PDF 自体より約 3 分の 1 大きくなります。- デフォルトの AST 監査証跡はインメモリです。 標準のプロバイダー配線を通じて記録されたエントリはプロセス間で永続化されません。永続的な監査証跡には、永続化された
AstAuditTrailInterface実装をインジェクトしてください。
セキュリティに関する注記
「セキュリティに関する注記」という見出しのセクション- フェイルクローズなソース解決。 MCP 呼び出し側はツール引数を完全に制御するため、リゾルバはそれらを敵対的と見なします。ストリームラッパー(
phar://、php://、file://、およびあらゆるスキーム)と NULL バイトは、いかなるファイルシステム呼び出しの前に拒否されます。パストラバーサルは拒否されます。生のファイルパスはNEXTPDF_MCP_INPUT_DIRが設定されている場合にのみ機能し、realpathで正規化された対象は厳密にそのディレクトリ内に解決されなければならず、プレフィックス混同エスケープを阻止するためにセパレータ境界で比較されます。 - サイドカーエンドポイントの SSRF ガード。
SpectrumClientFactoryはローカルサイドカーモードのために localhost を許可し、それ以外のすべてのSPECTRUM_URLをプライベート、予約済み、リンクローカル、クラウドメタデータの範囲に対して検証し、ブロックされたアドレスに対してInvalidArgumentExceptionをスローします。これは設定されたエンドポイントに対する設定時のゲートであり、ネットワーク層の制御ではありません。エグレスポリシー、リダイレクト処理、DNS ピンニングはホスト環境で維持してください。 - シークレットは環境に留まります。 サイドカーベアラートークン(
SPECTRUM_AUTH_TOKEN)と HMAC 署名シークレット(SPECTRUM_APP_SECRET)は環境変数から読み取られ、ツールのペイロードや結果に現れることは決してありません。 - 非反射的なエラー。 パス拒否メッセージは設計上ジェネリック(
Source path is not permitted.)であり、探りを入れる呼び出し側はホストのファイルシステムについて何も学べません。 - リスクの上書きは引き上げのみ。 オペレーター設定はツールの宣言済みリスクレベルを引き上げられますが、ツール自身の宣言を下回って引き下げることは決してできません。
サポートは適合性ではなく、適合性は認証ではありません。NextPDF はいかなる認証も保有せず、いかなる認証も付与しません。コンプライアンスツールはドキュメント構造を名前付きポリシープロファイルに対してチェックし、条項参照とともに指摘を報告します。compliance_check レポートはさらに、それが参考のための技術的な構造チェックであり、法的助言でもコンプライアンスの是認でもないというエンジン自身の免責事項を伴います。ai_ready_certify と certify_ai_ready の判定は製品定義のレディネスレベルであり、いかなる標準化団体による証明でもありません。MCP はそのベンダースチュワードによって公開されたオープンプロトコルであり、SDO 標準ではありません。このページは NextPDF の実装挙動を記述するものであり、独立したプロトコル適合性や認証の主張は行いません。
挙動コントラクト
「挙動コントラクト」という見出しのセクション- ツールの障害はエラー結果(メッセージを伴う
isError = true)として返されます。例外が MCP 境界を越えることは決してありません。 - 成功結果は、1 行の人間可読な要約に加え、ツールごとに安定した文書化済みのフィールドセットを持つ構造化 JSON ペイロードを伴います。
- すべてのツールは
tier() = ToolTier::Enterpriseと宣言済みのRiskLevelを報告します。リスクはランタイムで引き下げられません。 - 読み取り専用ツールは
readOnlyHint: trueを宣言し、ドキュメントストア、ソース PDF、いかなるコレクションも変更しません。 certify_ai_readyは入力ドキュメントをその場で変更することは決してありません。スタンプは返されるコピーに適用されます。- コンプライアンスおよび LTV レポートには検証タイムスタンプと重大度別の指摘件数が含まれます。
compliance_checkペイロードにはさらにエンジンの法的免責事項の文字列が含まれます。
Core フォールバック
「Core フォールバック」という見出しのセクションMCP ホスト自体は Enterprise を必要としません。NextPDF Connect(nextpdf/server、Apache-2.0)はオープンな Core エンジンで動作し、その Core ティアのツールカタログ(ドキュメント作成、テキストおよびコンテンツ操作、抽出)を提供します。ツールカタログを参照してください。Core 単体では、コンプライアンスポリシーチェック、フォレンジック分析、LTV ヘルスチェック、AI レディネススタンプ、AST 対応チャンク化、ミューテーション監査証跡、バッチおよび RAG ツールは提供されません。これら 11 個のツールは nextpdf/enterprise がインストールされライセンスされている場合にのみ登録されます。
このページは外部から観測可能な挙動とサポートされる公開 API サーフェスのみを記述します。内部の名前空間パス、ヘルパークラス、メカニズムテーブル、ランブックのファイル名、チケットのプレフィックスは対象外です。