Bỏ qua để đến nội dung

Di chuyển từ chế độ chỉ dùng MCP sang nhiều giao thức

Chuyển một tích hợp từ Model Context Protocol (MCP) qua stdio sang Representational State Transfer (REST) hoặc gRPC. Hành vi của engine không thay đổi. Danh mục, mô hình rủi ro và cổng xác nhận vẫn giữ nguyên. Ba yếu tố thay đổi là giao thức truyền, xác thực và mô hình đồng thời.

Terminal window
composer require nextpdf/server
./vendor/bin/rr get-binary

Tài liệu ban đầu của gói này mô tả một giao thức: MCP qua stdio. Giờ đây, gói này cung cấp cùng một tool registry qua ba giao thức. Để di chuyển, hãy chọn một giao thức qua mạng, rồi ánh xạ các lệnh gọi MCP của bạn sang giao thức đó. Bạn không cần viết lại logic xử lý tài liệu của mình.

Chọn giao thức phù hợp với phương án triển khai của bạn:

  • Giữ MCP khi bạn có một agent cục bộ duy nhất, cần độ trễ thấp nhất (không có bước nhảy qua mạng), hoặc dùng một client MCP-native, chẳng hạn như trợ lý IDE cục bộ.
  • Chuyển sang REST khi cần nhiều client truy cập với khóa API riêng cho từng client, triển khai bằng container hoặc Kubernetes, giới hạn tốc độ theo từng client, job bất đồng bộ, hoặc client viết bằng bất kỳ ngôn ngữ nào.
  • Chuyển sang gRPC khi cần hợp đồng được định kiểu, truyền PDF lớn theo kiểu server-streaming, và triển khai giữa dịch vụ với dịch vụ bằng mutual-TLS.
  • Tool registry và danh mục phụ thuộc runtime (xem /connect/tool-catalog/).
  • Mô hình rủi ro bốn cấp và cổng xác nhận (xem /connect/hitl-risk-tiers/).
  • Mô hình tài liệu và ngữ nghĩa của engine.
Khía cạnhMCP (stdio)RESTgRPC
Định dạng truyềnJSON-RPC 2.0 qua stdioJSON qua HTTPProtobuf qua gRPC
Xác thựckhông có (tiến trình con cục bộ)Authorization: Bearer khóa APIbearer trong metadata của lệnh gọi
Đồng thờimột tiến trình, một lệnh gọinhóm worker RoadRunnernhóm gRPC RoadRunner
Bất đồng bộkhông áp dụngcác endpoint jobcác RPC job
Truyền luồngkhông áp dụngphần thân đồng bộcác RPC server-streaming

Một chuỗi MCP điển hình gồm create_pdf, các công cụ nội dung, rồi output_pdf. Trong REST, chuỗi này trở thành một yêu cầu POST /api/v1/render không trạng thái với một mảng operations theo thứ tự. Khi cần trạng thái theo từng bước, hãy dùng các endpoint session opt-in thay thế. Trong gRPC, phần tương đương là RPC Render, hoặc RenderStream để phân phối theo từng phần. Với các bản dựng có trạng thái, hãy dùng các RPC CreateSession, SessionOperationSessionRender.

Chuỗi công cụ MCPRESTgRPC
create_pdf + các công cụ nội dung + output_pdfPOST /api/v1/renderRender / RenderStream
Bản dựng có trạng thái qua nhiều lệnh gọiPOST /api/v1/sessions (+ các thao tác session)CreateSession (+ SessionOperation)
Kết xuất kéo dàiPOST /api/v1/jobs rồi thăm dò kết quảSubmitJob rồi GetJobResult
Thao tác bị kiểm soát theo cấpPOST /api/v1/<operation>ExecuteCapability

Lệnh gọi MCP:

{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"add_text","arguments":{"text":"Hello"}}}

trở thành yêu cầu REST:

Terminal window
curl -sS -X POST http://localhost:8080/api/v1/render \
-H "Authorization: Bearer $NEXTPDF_KEY" \
-H 'Content-Type: application/json' \
-d '{"operations":[{"type":"add_text","text":"Hello"}]}' \
--output hello.pdf

Chạy cả hai giao thức trong quá trình di chuyển theo từng giai đoạn. Hồ sơ RoadRunner kết hợp phục vụ cả REST và gRPC từ một supervisor duy nhất. Tích hợp MCP cũ vẫn có thể tiếp tục chạy cục bộ ở nơi vẫn phù hợp:

Terminal window
export NEXTPDF_API_KEYS_FILE=/run/secrets/api-keys
./vendor/bin/rr serve -c .rr.full.yaml

Không có trạng thái dùng chung nào cần di chuyển. Các giao thức là những tiến trình độc lập chạy trên cùng một engine. Hãy chuyển dần các client sang giao thức mới.

Trường hợp đặc biệt và điểm cần lưu ý

Phần tiêu đề “Trường hợp đặc biệt và điểm cần lưu ý”
  • Thêm xác thực. Giao thức MCP không có xác thực nào vì nó là một tiến trình con cục bộ. Các giao thức qua mạng yêu cầu một khóa API hợp lệ cho mọi yêu cầu không dùng để kiểm tra tình trạng. Hãy chuẩn bị sẵn khóa trước khi chuyển đổi. Xem /connect/security-and-operations/.

  • Cổng xác nhận vẫn được kích hoạt. Một công cụ approval_required sẽ yêu cầu xác nhận trong REST và gRPC giống hệt như trong MCP. Hãy chuyển cả luồng xác nhận sang tích hợp mới. Đừng cho rằng cổng này chỉ dành cho MCP. Xem /connect/hitl-risk-tiers/.

  • Việc kiểm soát theo cấp không thay đổi. Một thao tác Pro hoặc Enterprise cần cài đặt nextpdf/premium và một khóa có quyền tương ứng trên giao thức mới, giống như công cụ tương ứng cần gói này trong MCP.

  • Idempotency là điểm mới và hữu ích. REST bổ sung một cơ chế kiểm soát idempotency mà giao thức stdio chưa từng có. Hãy dùng cơ chế này để việc gửi job có thể thử lại một cách an toàn. Xem /connect/production-usage/.

MCP chạy trong một tiến trình và có độ trễ thấp nhất cho một agent cục bộ. Các giao thức qua mạng bổ sung thêm một nhóm worker và một bước nhảy qua mạng. Đổi lại, chúng có thể mở rộng cho nhiều client đồng thời. Hãy chuyển các tác vụ kết xuất kéo dài sang luồng job bất đồng bộ trên giao thức mới để worker không bị chiếm giữ.

Việc rời khỏi stdio làm tăng bề mặt phơi nhiễm mạng. Hãy kết thúc Transport Layer Security (TLS) ở phía trước REST, dùng mutual TLS cho gRPC trên các mạng không tin cậy, giới hạn phạm vi khóa theo từng client, và giữ enabled_tools ở mức tối thiểu. Mô hình không có thông tin xác thực của giao thức MCP chỉ an toàn vì nó là một tiến trình con cục bộ. Đừng tái tạo mức phơi nhiễm đó qua mạng. Xem /connect/security-and-operations/.

Trang này cung cấp hướng dẫn di chuyển. Các trích dẫn về giao thức và xác thực được đặt tại /transports/mcp/, /transports/rest/, /transports/grpc/, và /connect/security-and-operations/.

Các thao tác bị kiểm soát theo cấp đều cần nextpdf/premium bất kể giao thức nào. Việc di chuyển không thay đổi phần nào là core và phần nào là Premium. Nó chỉ thay đổi cách bạn truy cập danh mục.

  • /transports/mcp/ — giao thức bạn rời khỏi
  • /transports/rest/ · /transports/grpc/ — các giao thức bạn chuyển sang
  • /connect/tool-catalog/ — danh mục, giống nhau trên mọi giao thức
  • /connect/hitl-risk-tiers/ — cổng xác nhận, giống nhau trên mọi giao thức
  • /connect/security-and-operations/ — phần xác thực bạn phải thêm vào