Aller au contenu
getnextpdf.com

Enterprise édition

MCP — référence approfondie

L’espace de noms NextPDF\Enterprise\Mcp fournit le niveau Enterprise du catalogue d’outils MCP de NextPDF. Sa surface publique se compose de onze classes d’outils, d’une fabrique de clients et d’une exception typée. Chaque outil implémente le contrat NextPDF\Server\Tools\ToolInterface de l’environnement d’exécution nextpdf/server et déclare ToolTier::Enterprise. Six outils analysent un seul PDF en cours de processus. Quatre outils délèguent les charges de travail par lots et RAG au sidecar Spectrum via NextPDF\Enterprise\Mcp\SpectrumClientFactory. Un outil lit une piste d’audit de mutations AST injectée par le constructeur au lieu d’octets PDF. Chaque outil décrit lui-même son nom MCP, son entrée JSON Schema, ses annotations client, son RiskLevel et sa catégorie.

Cette fonctionnalité est fournie dans NextPDF Enterprise (nextpdf/enterprise) et s’active avec une enveloppe de licence de niveau Enterprise. Un déploiement sans ce droit ne charge pas les classes de la fonctionnalité. Compare les éditions et obtiens une licence.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
ForensicAnalyzeTool::executearray $arguments, InMemoryDocumentStore $store ; args : document_id ou sourceExécute l’analyse forensique : révisions, mises à jour incrémentielles, signaturesToolResult (rapport JSON)ToolResult d’erreur ; les exceptions sont interceptées, jamais relancéesOutil forensic_analyze ; RiskLevel::Safe ; lecture seule, idempotent ; catégorie document ; depuis 2.0.0
BatchForensicAnalyzeTool::executeargs : workspace_token, documents[] (chacun id + path)Analyse forensique par lots via le sidecar SpectrumToolResult avec un status par document, nombres de réussites et d’échecsToolResult d’erreur (arguments manquants, échec du sidecar)Outil batch_forensic_analyze ; RiskLevel::Safe ; catégorie document ; depuis 2.1.0
ComplianceCheckTool::executeargs : policy (énumération à 12 valeurs), document_id ou sourceÉvalue le PDF au regard d’une politique de conformité nomméeToolResult avec constats, réussite/échec, duration_ms et un champ disclaimerToolResult d’erreur ; une politique inconnue retourne une erreur listant les clés prises en chargeOutil compliance_check ; RiskLevel::Review ; catégorie document ; depuis 2.0.0
BatchComplianceCheckTool::executeargs : workspace_token, documents[], policies (pdfa, pades, zugferd ; par défaut ["pdfa"])Contrôles de conformité par lots via le sidecar SpectrumToolResult avec nombres de documents conformes / non conformesToolResult d’erreur ; chaque élément de documents[] est validé pour un id et un path non videsOutil batch_compliance_check ; RiskLevel::Safe ; catégorie document ; depuis 2.1.0
LtvHealthCheckTool::executeargs : document_id ou sourceExécute la politique de santé LTV sur un PDF signéToolResult avec constats et réussite/échecToolResult d’erreurOutil ltv_health_check ; RiskLevel::Safe ; catégorie document ; depuis 2.0.0
AiReadyCertifyTool::executeargs : document_id ou sourceÉvaluation de la préparation à l’IA en lecture seule sur quatre critèresToolResult avec certification_level (certified, partial, not_certified) et des booléens par critèreToolResult d’erreurOutil ai_ready_certify ; RiskLevel::Review ; lecture seule ; catégorie document ; depuis 2.0.0
CertifyAiReadyTool::executeargs : document_id ou source, return_stamped_pdf (par défaut true)Évalue trois critères et ajoute un tampon de provenance XMPToolResult ; inclut stamped_pdf_base64 sauf si désactivé ou not_certifiedToolResult d’erreurOutil certify_ai_ready ; RiskLevel::Review ; pas en lecture seule ; catégorie document ; depuis 3.0.0
AstAwareChunkTool::executeargs : document_id ou source, max_chunk_chars (par défaut 1500), overlap_chars (par défaut 150)Construit l’AST et émet des fragments ancrés par citation avec provenanceToolResult avec chunk_count et, par fragment, l’ID de nœud, l’index de page, la bbox et le type de nœudToolResult d’erreurOutil ast_aware_chunk ; RiskLevel::Review ; catégorie extraction ; depuis 3.0.0
AuditAstMutationsTool::__constructAstAuditTrailInterface $auditTrailInjecte le backend de la piste d’auditinstanceDépendance injectée par le constructeur ; depuis 3.0.0
AuditAstMutationsTool::executeargs : document_source_hash (hex SHA-256, requis)Retourne tous les événements de mutation AST enregistrés pour ce documentToolResult avec entries[] et countToolResult d’erreur lorsque l’argument est manquant ou videOutil audit_ast_mutations ; RiskLevel::Review ; catégorie document ; depuis 3.0.0
EmbedDocumentsTool::executeargs : collection_id, workspace_token, documents[] (tous requis)Ingère des PDF dans une collection RAG via le sidecar SpectrumToolResult avec nombres de réussites / total / échecsToolResult d’erreurOutil embed_documents ; RiskLevel::Caution ; pas en lecture seule, pas idempotent ; catégorie extraction ; depuis 2.1.0
SearchDocumentsTool::executeargs : collection_id, query (requis), top_k (par défaut 10, borné 1–100), mode (hybrid, bm25, semantic)Récupération hybride sur une collection ingéréeToolResult avec fragments classés et scores de pertinenceToolResult d’erreur ; un mode hors de la liste d’autorisation est rejetéOutil search_documents ; RiskLevel::Safe ; catégorie extraction ; depuis 2.1.0
SpectrumClientFactory::createaucun (lit SPECTRUM_URL, SPECTRUM_TIMEOUT, SPECTRUM_AUTH_TOKEN, SPECTRUM_APP_SECRET)Construit et met en cache un client sidecar unique à l’échelle du processusSpectrumClientInvalidArgumentException lorsque SPECTRUM_URL est mal formée ou cible une adresse bloquéePoint de terminaison par défaut http://127.0.0.1:7800 ; délai d’attente 30.0 s ; depuis 2.1.0
SpectrumClientFactory::resetaucunEfface l’instance de client mise en cachevoidDestiné aux tests
SpectrumClientFactory::createRequeststring $method, $uri (string ou UriInterface)Construit une requête PSR-7 à partir des classes HTTP de CoreRequestInterfaceImplémentation PSR-17 de RequestFactoryInterface
SpectrumClientFactory::createStreamstring $content = ''Construit un flux PSR-7 en mémoireStreamInterfaceImplémentation PSR-17 de StreamFactoryInterface
SpectrumClientFactory::createStreamFromFilestring $filename, string $mode = 'r'Ouvre le fichier et l’enveloppe en fluxStreamInterfaceMcpStreamException lorsque le fichier ne peut pas être ouvertMcpStreamException étend RuntimeException
SpectrumClientFactory::createStreamFromResource$resource (ressource PHP)Enveloppe une ressource existante en fluxStreamInterfaceImplémentation PSR-17 de StreamFactoryInterface
McpStreamExceptionÉchec typé d’acquisition de fluxfinal class, étend RuntimeException ; la source documente la compatibilité PSR-17 §1.5 ; la source l’annote @since 3.2.0 (présente dans la ligne de développement actuelle aliasée 3.1.0)

Chaque outil expose également les méthodes d’auto-description de ToolInterface : name, description, inputSchema, annotations, riskLevel, tier et category. Leurs valeurs propres à chaque outil figurent dans la colonne Notes ci-dessus.

Signatures des points d’entrée, telles quelles depuis la source :

public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function __construct(private readonly AstAuditTrailInterface $auditTrail)
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
public function execute(array $arguments, InMemoryDocumentStore $store): ToolResult
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
  • Chaque outil implémente NextPDF\Server\Tools\ToolInterface et déclare explicitement ToolTier::Enterprise. Le niveau n’est jamais déduit de l’espace de noms ou de l’empaquetage.
  • execute ne lève pas d’exception. Chaque échec est intercepté et retourné sous forme de ToolResult d’erreur portant le message d’échec.
  • Les outils à document unique résolvent les octets PDF selon une priorité fixe. Un document_id est d’abord recherché dans l’InMemoryDocumentStore. Sinon, source est interprété comme une URI data:, puis comme du base64 brut (plus de 256 caractères), puis comme un chemin de fichier.
  • Les chemins de fichier source sont désactivés par défaut. Ils ne s’activent que lorsque la variable d’environnement NEXTPDF_MCP_INPUT_DIR nomme un répertoire d’entrée confiné. Le chemin réel résolu doit rester à l’intérieur de ce répertoire. Tout le reste échoue en mode fermé.
  • Les schémas de wrapper de flux (phar://, php://, file:// et tout autre schéma) ainsi que les octets nuls dans un source de type chemin de fichier sont rejetés avant tout appel au système de fichiers. Les évasions par traversée et par lien symbolique échouent face au contrôle de confinement du chemin réel.
  • Les outils adossés à un sidecar (embed_documents, search_documents, batch_compliance_check, batch_forensic_analyze) obtiennent leur client depuis SpectrumClientFactory::create. La fabrique valide une SPECTRUM_URL non-localhost au regard des plages d’adresses privées et réservées avant utilisation. Le localhost explicite est autorisé pour le mode sidecar local.
  • ai_ready_certify dérive son niveau de quatre critères : intégrité forensique, présence de signature, validité LTV et absence de chiffrement. Les quatre validés donnent certified ; un à trois donnent partial ; zéro donne not_certified. L’intégrité forensique est une heuristique structurelle sur la chaîne de révisions, et non une vérification cryptographique de l’intégrité des octets. Le contrôle de chiffrement n’inspecte que la région du trailer.
  • certify_ai_ready évalue trois critères et ajoute un tampon de provenance XMP. Les octets tamponnés sont retournés encodés en base64 sauf si return_stamped_pdf vaut false ou si le niveau est not_certified.
  • compliance_check accepte exactement douze clés de politique : pdfa4, pdfa4e, pdfa4f, pades-baseline, ltv-health, eidas-qualified, zugferd, fda-part11, sec-17a4, sec-17a4-compatible, sec-17a4-structural, sec-17a4-pre-sign. Une clé inconnue retourne un résultat d’erreur nommant l’ensemble pris en charge.
  • audit_ast_mutations ne lit que l’AstAuditTrailInterface injecté. Il n’enregistre rien lui-même.
  • Ni document_id ni source fournis : résultat d’erreur indiquant à l’appelant d’en fournir un.
  • document_id inconnu : résultat d’erreur nommant l’ID et pointant vers create_pdf.
  • source de type chemin de fichier avec NEXTPDF_MCP_INPUT_DIR non défini : rejeté avec un message nommant les canaux pris en charge.
  • Chemin source se résolvant en dehors du répertoire d’entrée configuré, y compris via un lien symbolique : rejeté. La comparaison se fait sur une frontière de séparateur de répertoire, de sorte que des répertoires frères partageant un préfixe de nom ne peuvent pas passer.
  • URI data: sans séparateur virgule, ou charge utile base64 invalide : résultat d’erreur.
  • top_k de search_documents hors de 1–100 : borné, pas rejeté. Un top_k non entier revient à la valeur par défaut configurée du pipeline.
  • mode de search_documents hors de hybrid, bm25, semantic : résultat d’erreur de la liste d’autorisation du pipeline.
  • Élément de documents[] de batch_compliance_check sans id ou path, ou portant des chaînes vides : résultat d’erreur nommant l’index fautif. batch_forensic_analyze ne valide que la forme du tableau externe ; les défauts d’élément remontent depuis la couche de traitement par lots.
  • SpectrumClientFactory::create avec une SPECTRUM_URL mal formée, ou ciblant une adresse privée, link-local ou de métadonnées : InvalidArgumentException. À l’intérieur d’un execute d’outil, cela remonte sous forme de résultat d’erreur.
  • SpectrumClientFactory::createStreamFromFile sur un chemin illisible : McpStreamException.
  • Les variables d’environnement vides sont traitées comme non définies et reviennent aux valeurs par défaut.

NextPDF ne détient aucune certification et n’en accorde aucune. Les outils MCP rapportent des évaluations au niveau des capacités ; la prise en charge n’est pas la conformité, et la conformité n’est pas la certification. Les valeurs certification_level retournées par ai_ready_certify et certify_ai_ready relèvent du vocabulaire propre rapporté par les outils. Elles ne constituent pas une attestation par un tiers. Les réponses de compliance_check incluent un champ disclaimer produit par le rapport sous-jacent pour la même raison. Les références de clause de politique, telle que la base de la politique LTV que la source du produit indique comme ISO 32000-2:2020 §12.8.4.3, sont portées dans les descriptions d’outils et les champs clause par constat ; cette page n’ajoute aucune revendication de normes indépendante. Déterminer si un document contrôlé satisfait une réglementation appartient à l’opérateur et à ses évaluateurs.

  • SpectrumClientFactory::create met en cache un client par processus. Appelle SpectrumClientFactory::reset dans la configuration des tests pour forcer un nouveau client.
  • Les lectures d’environnement consultent $_ENV, puis $_SERVER, puis getenv, et traitent les chaînes vides comme absentes.
  • RiskLevel pilote le traitement côté hôte dans l’environnement d’exécution du serveur : Safe s’exécute automatiquement, Caution et au-dessus sont journalisés pour audit, et ApprovalRequired exige une confirmation humaine. Aucun outil MCP Enterprise ne déclare ApprovalRequired. Les remplacements par l’opérateur peuvent élever un niveau déclaré, jamais l’abaisser.
  • Les valeurs annotations (readOnlyHint, idempotentHint) sont des indices pour le client MCP, pas une application. Le confinement et la validation ont lieu côté serveur indépendamment des indices.
  • Les outils rapportent des valeurs category document ou extraction pour le filtrage de tools/list.
  • AuditAstMutationsTool est le seul outil nécessitant une injection par le constructeur ; enregistre-le avec une implémentation concrète d’AstAuditTrailInterface.

Cette page ne documente que le comportement observable de l’extérieur et la surface d’API publique prise en charge. Les chemins d’espace de noms internes, les classes utilitaires, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de tickets sont hors périmètre.