- From the tool list of the currently loaded plugin, find the
pdfcraft-editorservice. Call it with the absolute path of this task's workspace:open_editor, passing on the first callworkspace; relative file paths can be handed to the specific open tool once the editor is ready. - When the host supports native MCP Apps, present
ui://pdfcraft/panel.html. A text-only tool result does not mean the interface has been opened. - When Codex does not automatically present the panel, call
open_browser_editor, and hand the returnededitorUrlto the host's built-in browser opening capability. Codex Desktop can callopen_in_codex, with target as browser and url as the actual return value. Do not guess the local page path as a fixed port. - Only one editing page is opened per instance. Call
editor_status, and wait untilattachedorreadyis true before proceeding; if loading fails, handle the page error first. - All edits in this round use the same service. The native CLI and the Web editor are not the same in-memory document; before switching, you must save and explicitly reopen.
The upstream tool names belong to PdfCraft. doc_open/doc_create return a doc handle; subsequent doc_info, doc_save, and page_render use the same doc. PDF page numbers start at 1, and parameters are subject to the actual schema.
If the host only supports MCP, tool-calling capability and the embedded UI are two different things. The same editorUrl can be used in an external browser, but you must clearly state that this is not in-host embedded acceptance.
When the development candidate lacks ui/dist/adapter.mjs , you need to first follow the plugin ui/README.md to build. Do not guess paths from arbitrary caches, and do not bypass validation. This skill installed independently does not come with an editor service; you need to install the companion plugin or configure its MCP backend.
When the tool is not registered, after obtaining the plugin's actual directory, you can run in the project terminal node ui/dist/adapter.mjs --serve, specifying this task's workspace via the environment variable CRAFT_WORKSPACE_ROOT . Keep that process alive; this mode can display the UI, but automation must still connect to the corresponding MCP instance, and you cannot start another backend and claim it shares the session.
When done, save the project and reopen to check; read the actual exported file. Browser storage, preview screenshots, and submitted render jobs do not equal workspace delivery.