コンテンツにスキップ
getnextpdf.com

Enterprise エディション

MCP ツール

NextPDF Enterprise は NextPDF Connect サーバーに 11 個の MCP ツールを追加します。これらは AI アシスタントやエージェントフレームワークに、Enterprise エンジンへの直接的で型付けされたアクセスを提供します。すなわち、コンプライアンスポリシーチェック、PDF フォレンジック、LTV ヘルスチェック、AI レディネススタンプ、AST 対応チャンク化、RAG の取り込みと検索です。すべてのツールは自身のリスクレベルと読み取り専用の姿勢を宣言するため、MCP ホストはエージェントの活動を確信をもってゲート、ログ記録、監査できます。障害が例外として表面化することは決してなく、エージェントは常に構造化されパース可能な結果を受け取ります。

この機能は NextPDF Enterprisenextpdf/enterprise)で提供され、Enterprise ティアのライセンスエンベロープで有効化されます。その権限のないデプロイメントでは、この機能のクラスはロードされません。エディションを比較してライセンスを取得する

Terminal window
composer require nextpdf/enterprise:^3

MCP ホスト自体は 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_TOKENSPECTRUM_APP_SECRET です。

Model Context Protocol(MCP)は、AI アシスタントやエージェントフレームワークがサーバーの公開する型付けツールを呼び出せるようにするオープンプロトコルです。PDF バイト列をプロンプトに貼り付けて期待するのではなく、エージェントは JSON スキーマで検証されたペイロードとともに名前付きツールを呼び出し、決定論的で構造化された結果を受け取ります。NextPDF Connect は PDF 向けのそのサーバーであり、Enterprise パッケージは以下のツールでそのカタログを拡張します。各ツールは、あなたの PHP コードが直接呼び出すのと同じ Enterprise API の薄いラッパーであるため、エージェント実行のチェックとコード実行のチェックは同じ判定を生み出します。

MCP ツールクラス機能リスク読み取り専用
compliance_checkComplianceCheckTool1 つの PDF を名前付きポリシーに対して検証。pdfa4pdfa4epdfa4fpades-baselineltv-healtheidas-qualifiedzugferdfda-part11、および 4 つの sec-17a4 バリアント。Reviewyes
batch_compliance_checkBatchComplianceCheckTool多数の PDF を pdfapades、または zugferd ポリシーに対して 1 回の Spectrum サイドカーバッチでチェック。Safeyes
forensic_analyzeForensicAnalyzeTool改ざん検出のためのリビジョン履歴、増分更新、変更イベントを報告。Safeyes
batch_forensic_analyzeBatchForensicAnalyzeTool多数の PDF に対するフォレンジック分析を 1 回のサイドカーバッチで実行。Safeyes
ltv_health_checkLtvHealthCheckTool署名済み PDF の長期検証マテリアル(DSS ディクショナリ、OCSP レスポンス、CRL エントリ、VRI エントリ、証明書ストア)をチェック。Safeyes
ai_ready_certifyAiReadyCertifyTool4 つの基準(フォレンジック完全性、署名の有無、LTV の有効性、暗号化なし)に対する読み取り専用の製品定義 AI レディネス判定。Reviewyes
certify_ai_readyCertifyAiReadyTool3 つの基準(読み取り専用ツールの 4 つからフォレンジック完全性を除いたもの。このツールはスタンプするファイルを書き換えるため設計上そうなっている)に対する製品定義のレディネス判定を行い、XMP プロベナンススタンプを追加。スタンプ済み PDF を base64 で返す。Reviewno
ast_aware_chunkAstAwareChunkToolPDF を見出し境界に沿って引用アンカー付きチャンクに分割。チャンクごとにノード ID、ページインデックス、バウンディングボックスを付与。Reviewyes
audit_ast_mutationsAuditAstMutationsToolSHA-256 ソースハッシュでドキュメントの AST ミューテーション監査証跡を取得。Reviewyes
embed_documentsEmbedDocumentsToolPDF を RAG コレクションに取り込む。パース、チャンク化、埋め込み、インデックス化。コレクション状態を変更する。Cautionno
search_documentsSearchDocumentsTool取り込み済みコレクションに対するハイブリッド検索(BM25 キーワードとセマンティック)。ランク付け・スコア付けされたチャンクを返す。Safeyes

「certify」ツールは製品定義のレディネス判定(certifiedpartial、または not_certified)を発行します。この判定は技術的なチェック結果であり、いかなる認定機関による認証でもありません。

すべてのツールは、Connect の 4 ティアモデルからリスクレベルを宣言します。Safe ツールは自動実行します。Caution ツールは監査ログエントリとともに自動実行します。Review ツールは呼び出し側エージェントの指示に対する警告を伴います。ApprovalRequired ツールは人間の確認を要求します。破壊的なツールが存在しないため、現在このレベルを宣言する Enterprise MCP ツールはありません。ランタイム設定はツールのリスクレベルを引き上げることしかできず、決して引き下げられません。ツールは MCP 挙動アノテーション(readOnlyHintidempotentHint)も公開するため、準拠クライアントは独自のゲートをその上に適用できます。完全なモデルについては HITL リスクティアを参照してください。

この設計の要となる決定は、ツールが自己宣言型のガバナンスを備えた薄い決定論的ラッパーであることです。各ツールは自身のリスクレベルとティアをドメイン不変条件として述べ、名前空間やパッケージ構成から推論することはありません。これにより、トランスポートを信頼することなく、ホストにおいてゲート判断を監査可能に保ちます。ツールは独自のドキュメントインテリジェンスを一切持たず、あなたのコードが呼び出すのと同じ Enterprise API に委譲するため、テストすべき挙動は 1 つ、信頼すべき判定は 1 つだけです。エラーは例外として抜け出すのではなく MCP エラーチャネルで返されます。エージェントは PHP 例外をキャッチできませんが、常に isError で分岐できるからです。ファイルシステムに触れうる入力はデフォルトでフェイルクローズです。MCP 引数は定義上、攻撃者が到達可能だからです。

設計の背景:推測を拒む API

11 個すべてのツールは nextpdf/serverNextPDF\Server\Tools\ToolInterface コントラクトを実装し、同じ公開サーフェスを共有します。以下のシグネチャは代表として NextPDF\Enterprise\Mcp\ComplianceCheckTool に対して一度だけ示します。

public function name(): string
public function description(): string
public function inputSchema(): array
public function annotations(): array
public function riskLevel(): RiskLevel
public function tier(): ToolTier
public function category(): string
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult

スロー/失敗する条件:execute() は決してスローしません。内部で Throwable をキャッチし、isError = trueToolResult::error() を返します。無効な引数(workspace_token の欠落、不正な documents エントリ、未知の document_id、安全でない source)は、そのエラーチャネル上で InvalidArgumentException メッセージとして表面化します。

監査証跡ツールは、そのストレージバックエンドをコンストラクタインジェクションで受け取ります。

public function __construct(private readonly AstAuditTrailInterface $auditTrail)

カタログを登録するプロバイダー:

public function getTier(): string
public function getTools(): array

getTier()'enterprise' を返します。getTools() は 11 個のツールインスタンスを返します。audit_ast_mutations はデフォルトで NextPDF\Enterprise\Ast\InMemoryAstAuditTrail に配線されています。

Spectrum サイドカークライアントファクトリ。これは PSR-17 リクエストおよびストリームファクトリでもあります。

public static function create(): SpectrumClient
public static function reset(): void
public function createRequest(string $method, $uri): RequestInterface
public function createStream(string $content = ''): StreamInterface
public function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterface
public function createStreamFromResource($resource): StreamInterface

スロー/失敗する条件:create() は、SPECTRUM_URL が不正な場合、または設定されたエンドポイントが既知のプライベートまたは予約済みアドレス(localhost を除く)を対象とする場合に InvalidArgumentException をスローします。これは設定時のゲートであり、ネットワーク層の制御ではありません。ホスト環境ではエグレスポリシー、リダイレクト処理、DNS ピンニングを引き続き強制してください。createStreamFromFile() は、ファイルを開けない場合に NextPDF\Enterprise\Mcp\McpStreamException(PSR-17 コントラクトに従い RuntimeException のサブクラス)をスローします。

インメモリの data: URI チャネルを使用して、エージェントが行うのと全く同じように PDF/A-4 コンプライアンスチェックを実行します。

quick-compliance-check.php
<?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 で利用できます。

サイドカーをプリフライトし、宣言されたリスク姿勢を強制したうえで、バッチコンプライアンスチェックを実行します。

gated-batch-compliance.php
<?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_iddata: 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_checkbatch_forensic_analyzeembed_documentssearch_documents は、到達可能な Spectrum エンドポイントと workspace_token を必要とします。ファクトリはプロセスごとに 1 つのクライアントをキャッシュします。テストでは SpectrumClientFactory::reset() を呼び出してください。
  • search_documentstop_k を 1〜100 にクランプします。 整数でない値はサーバーのデフォルトである 10 にフォールバックします。
  • ast_aware_chunk のデフォルトはチャンクあたり 1500 文字、オーバーラップ 150 文字です。
  • certify_ai_ready はスタンプ済みバイト列を省略します。 return_stamped_pdffalse の場合、または判定が 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_certifycertify_ai_ready の判定は製品定義のレディネスレベルであり、いかなる標準化団体による証明でもありません。MCP はそのベンダースチュワードによって公開されたオープンプロトコルであり、SDO 標準ではありません。このページは NextPDF の実装挙動を記述するものであり、独立したプロトコル適合性や認証の主張は行いません。

  • ツールの障害はエラー結果(メッセージを伴う isError = true)として返されます。例外が MCP 境界を越えることは決してありません。
  • 成功結果は、1 行の人間可読な要約に加え、ツールごとに安定した文書化済みのフィールドセットを持つ構造化 JSON ペイロードを伴います。
  • すべてのツールは tier() = ToolTier::Enterprise と宣言済みの RiskLevel を報告します。リスクはランタイムで引き下げられません。
  • 読み取り専用ツールは readOnlyHint: true を宣言し、ドキュメントストア、ソース PDF、いかなるコレクションも変更しません。
  • certify_ai_ready は入力ドキュメントをその場で変更することは決してありません。スタンプは返されるコピーに適用されます。
  • コンプライアンスおよび LTV レポートには検証タイムスタンプと重大度別の指摘件数が含まれます。compliance_check ペイロードにはさらにエンジンの法的免責事項の文字列が含まれます。

MCP ホスト自体は Enterprise を必要としません。NextPDF Connect(nextpdf/server、Apache-2.0)はオープンな Core エンジンで動作し、その Core ティアのツールカタログ(ドキュメント作成、テキストおよびコンテンツ操作、抽出)を提供します。ツールカタログを参照してください。Core 単体では、コンプライアンスポリシーチェック、フォレンジック分析、LTV ヘルスチェック、AI レディネススタンプ、AST 対応チャンク化、ミューテーション監査証跡、バッチおよび RAG ツールは提供されません。これら 11 個のツールは nextpdf/enterprise がインストールされライセンスされている場合にのみ登録されます。

このページは外部から観測可能な挙動とサポートされる公開 API サーフェスのみを記述します。内部の名前空間パス、ヘルパークラス、メカニズムテーブル、ランブックのファイル名、チケットのプレフィックスは対象外です。