import type { McpJsonEntry } from './projectMcp'; export type CreativeAppId = 'blender' | 'gimp'; export interface McpPrerequisiteSpec { /** Launcher/interpreter the server needs on PATH (e.g. 'uvx', 'python'). */ id: string; /** Copy-pasteable command to install it, per platform. */ installHint: string; } export interface McpCatalogEntry { id: CreativeAppId; name: string; /** True = prototype/best-effort. UIs should surface it as such, never one-click. */ experimental: boolean; /** The name the server is written under in .mcp.json. */ serverName: string; prerequisites: McpPrerequisiteSpec[]; /** Ordered manual steps the user still performs after the config is written. */ postSetup: string[]; /** Caveats worth surfacing (port clashes, upstream bugs). */ notes: string[]; } /** * Display placeholder for the gimp client path BEFORE install (path unknown). * `serverSpecFor('gimp', …)` with no resolved client path emits this so the * catalog/detect JSON never bakes in a machine-specific path — and, crucially, * never the broken raw-github upstream client. It also lets the migration * recognise a not-yet-resolved gimp entry and upgrade it once GIMP is detected. */ export declare const GIMP_CLIENT_PLACEHOLDER = "/mcp/gimp_mcp_client.py"; /** * The pinned mcp SDK version the client runs under. Load-bearing — current mcp * releases break the client on a removed `description=` kwarg. `uv run --with * mcp==1.2.0 ` installs exactly this into an ephemeral env. */ export declare const GIMP_MCP_PIN = "mcp==1.2.0"; /** Per-platform install hint for the `uv`/`uvx` toolchain (never `pip install uv`). */ export declare function uvInstallHint(platform: NodeJS.Platform): string; /** Per-platform install hint for Python 3. */ export declare function pythonInstallHint(platform: NodeJS.Platform): string; /** Per-platform install hint for git (the Blender Lab client clones a git repo via uvx). */ export declare function gitInstallHint(platform: NodeJS.Platform): string; /** * The official Blender Lab MCP client, pinned to the user-verified tag. This is * the client that matches the "MCP from Blender Lab" add-on shipped inside * Blender (protocol `{"type":"execute",...}\0` on localhost:9876). It is a * DIFFERENT project from the community PyPI `blender-mcp` (ahujasid/blender-mcp, * bare `uvx blender-mcp`) which speaks an incompatible `get_addon_info` protocol * and collides on the same name + port — see notes on the catalog entry. `uvx * --from git+…` makes uv clone the Lab repo (hence the extra `git` prerequisite). */ export declare const BLENDER_LAB_FROM = "git+https://projects.blender.org/lab/blender_mcp.git@v1.0.0#subdirectory=mcp"; /** * The McpJsonEntry we would write for an app. Platform-aware. * - Blender: the OFFICIAL Blender Lab client via bare `uvx --from git+…lab…#subdirectory=mcp * --with "mcp<2" blender-mcp` (uvx resolved from PATH). This matches the "MCP * from Blender Lab" add-on. NEVER bare `uvx blender-mcp` (no --from) — that * pulls the incompatible community PyPI package. (The exact launcher form is * under review; the args are the load-bearing part the migration re-resolves.) * - GIMP: the LOCALLY-INSTALLED, user-verified client run by bare `uv` * (`uv run --with mcp==1.2.0 `) on every platform. `clientPath` * is the client installGimpPlugin() writes to //mcp/. Pass * the resolved path via `opts.gimpClientPath`; without it we emit the display * placeholder (never the broken raw-github upstream client). Experimental. */ export declare function serverSpecFor(app: CreativeAppId, platform: NodeJS.Platform, opts?: { gimpClientPath?: string; }): McpJsonEntry; /** The client-path argument carried by a gimp .mcp.json entry, whatever the command form. */ export declare function gimpClientArgOf(entry: { command?: string; args?: string[]; }): string | undefined; /** * Is `arg` a CONCRETE local client path — a real filesystem path we must not * clobber (a user's own checkout, or the client we already installed)? False for * the display placeholder and for ANY URL (incl. the broken raw-github client). */ export declare function isConcreteGimpClientArg(arg: string | undefined): boolean; /** Build the catalog for a given platform (install hints are platform-specific). */ export declare function getCatalog(platform: NodeJS.Platform): McpCatalogEntry[]; /** Lookup a single catalog entry. */ export declare function catalogEntry(app: CreativeAppId, platform: NodeJS.Platform): McpCatalogEntry;