Search your local published library in the MCP App, confirm one exact template, then materialize it into a project.
## Local client preview Separate native macOS Apple Silicon and Intel DMGs, plus Windows and Linux ZIPs with bundled Node, are available through the local-client release workflow. Both bundled-Node and `no-node` editions (requiring installed Node.js 22+) omit gallery images and download previews on demand. See [installation and preview limitations](docs/INSTALL_LOCAL.md). The macOS preview is ad-hoc signed and is not notarized. ## Install with a coding agent Node.js 22+ is required. Do not execute user plotting code. After install, bind one global Library directory on disk; if `setup_required`, also bind a Local workspace before searching. ### Pi Install the published npm package. Do not `pi install` a GitHub URL or git clone: the repository does not contain `dist/`, so MCP cannot start. ```bash pi install npm:pi-mcp-adapter pi install npm:scientific-figure-library ``` Restart Pi. The package loads the `figure-library` Skill and registers the stdio MCP server through pi-mcp-adapter. If you already copied a local SFL app MCP config into `~/.config/mcp/mcp.json` or `.mcp.json`, skip `pi install npm:scientific-figure-library` — that duplicates tools. Paste this request: ```text Install Scientific Figure Library for Pi. Run: pi install npm:pi-mcp-adapter Then: pi install npm:scientific-figure-library Restart Pi. Do not clone the GitHub repo and do not add a second figure-library MCP entry. First test: figure_library_get_skill, then figure_library_source_status. If setup_required, bind the global Library and Local workspace. Tell me when I need to restart Pi. ``` ### DeepSeek Harness (dsh) `--profile` is required. Use `web` unless you run another profile. ```bash dsh plugin --profile web add scientific-figure-library ``` Restart the profile (`dsh --profile web` or `dsh web`). The bundle registers the Skill and mounts `@deepseek-ai/dsh-mcp-client` against this package. If you already added a dsh MCP client row for a local SFL app, do not also run `dsh plugin add scientific-figure-library`. Paste this request: ```text Install Scientific Figure Library for DeepSeek Harness. Run: dsh plugin --profile web add scientific-figure-library Restart the web profile. Do not clone the GitHub repo and do not add a second figure-library MCP row. First test: figure_library_get_skill, then figure_library_source_status. If setup_required, bind the global Library and Local workspace. Tell me when I need to restart dsh. ``` ### Claude, Codex, Cursor, Wisp, or another stdio host Give the agent this repository and the following request: ```text Install Scientific Figure Library from https://github.com/xuzhougeng/ScientificFigureLibrary. Follow docs/QUICKSTART.md. Prefer a GitHub Release ZIP when one is published. Node.js 22+ is required. Register the stdio MCP server as figure-library pointing at dist/index.js. For Wisp Science, use npm run package:wisp and install the generated plugin. For Cursor, use npm run package:cursor and unzip into ~/.cursor/plugins/local/figure-library/. Bind one global Library directory on disk. Do not execute user plotting code. First test: open or source_status; if setup_required, bind the global Library and Local workspace before searching. Tell me when I need to grant folder access or start a new host session. ``` Manual steps: [docs/QUICKSTART.md](docs/QUICKSTART.md). ## What is included - **Local Published library** — one user-selected directory, shared across projects and hosts - Direct **image + code intake**, review gates, immutable Revisions and Releases - MCP App gallery: browse, exact preview, user confirmation - Search, describe, preview, then **materialize** an exact confirmed template - Portable backup / restore / fork of the Library - Optional extra search providers; they do not replace local review - **Open Figure Modules** — the same `io.github.jarxunlai.personal-figures` Provider. A bundled snapshot is only the offline bootstrap. After install, SFL asynchronously checks a signed GitHub feed and atomically switches the local Catalog overlay. Ordinary template updates no longer require repackaging the plugin. Complete module ZIPs are still fetched only for one exact selected materialization. ## Bundled figure workflow The host plugin ZIPs and the npm package used by Pi and dsh include one core figure-library Skill with on-demand description, script-organization and style references. Ordinary MCP hosts can read the same guidance with `figure_library_get_skill`, browse thumbnails with `figure_library_get_candidate_images` or resource URIs, and paginate with `figure_library_search_page`. The MCP App is optional. Approved R/Python runtimes and host execution/image tools are still required when the user asks to draw. Template details render safe Markdown for the requirement, biological use cases and data profile, with actual input/code/package lists visible. Technical identities and validation state are available in a collapsed area. Historical Local Published/OFM entries remain readable; this update does not rewrite their content or the bundled FigureYa catalog. ## First success ```text Call figure_library_source_status. If writes are disabled, help me bind one absolute global Library directory (plan then apply after I confirm the path). Open the workbench and search my Local Published templates. Wait for me to confirm one card. Then plan materialization into an empty folder I specify. Do not execute R or Python. Do not redraw the figure. ``` If the local library is empty, import a figure/code pair, review it, and publish a Release before searching. Full contract: [docs/PROTOCOL.md](docs/PROTOCOL.md). ## Develop from source Requires Node.js 22+: Pull requests run tests, type checking, build and MCP smoke across Linux, Windows and macOS. See [basic CI](docs/CI.md) for the matrix and merge-check setup. Pushing a stable `vX.Y.Z` tag packages local clients, host plugins, the npm tarball and the Wisp update feed, then uploads them to the GitHub Release. Maintainers can also configure the optional [AI comment bot](docs/COMMENT_BOT.md) for manually requested issue suggestions and PR reviews. ```bash git clone https://github.com/xuzhougeng/ScientificFigureLibrary.git cd ScientificFigureLibrary npm ci npm run check node dist/index.js ``` ```json { "mcpServers": { "figure-library": { "command": "node", "args": ["/absolute/path/to/ScientificFigureLibrary/dist/index.js"] } } } ``` The Library locator is machine-local (`locator.json` under AppData / XDG). `FIGURE_LIBRARY_DIR` is an admin override only. ## Tools (short list) | Tool | Role | | --- | --- | | `figure_library_plan_bind_global` / `apply_bind_global` | Choose the local Library directory | | `figure_library_open` | Open the MCP App | | `figure_library_search` | Search Local Published (and any enabled extras) | | `figure_library_plan_working_revision` / `apply_working_revision` | Import a figure+code unit | | `figure_library_plan_publish_working_revision` / `apply_publish_working_revision` | Publish a Release | | `figure_library_plan_open_figure_module_pr` / `apply_open_figure_module_pr` | Optional Open Figure Modules GitHub PR | | `figure_library_plan_materialize` / `apply_materialize` | Copy a confirmed template into a project | The server never runs notebooks, installers, or plot scripts. See [SECURITY.md](SECURITY.md). ## Open Figure Modules Personal modules use one content repository for both cleaned source modules and deterministic archives (no second archive repository): ```text