From affinity-mcp-server
Controls Affinity creative suite on macOS via MCP tools. Launches apps, creates/opens documents, navigates menus, draws shapes, applies filters, and automates design workflows.
How this skill is triggered — by the user, by Claude, or both
Slash command
/affinity-mcp-server:affinity-designThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill teaches you how to orchestrate 23 MCP tools to control Affinity creative suite on macOS. The tools are low-level primitives — this skill provides the high-level workflow knowledge to combine them into real design tasks.
This skill teaches you how to orchestrate 23 MCP tools to control Affinity creative suite on macOS. The tools are low-level primitives — this skill provides the high-level workflow knowledge to combine them into real design tasks.
Understand Affinity's interface before interacting with it:
affinity_get_menus and affinity_click_menuaffinity_select_toolaffinity_mouse_action with screen coordinatesaffinity_get_ui, interact via affinity_click_uiaffinity_get_ui + affinity_click_uiAlways begin by checking status, launching if needed, then creating or opening a document:
affinity_status to check if Affinity is running and see open windowsaffinity_launch if not running (waits 3 seconds for startup)affinity_new_document to create a blank document, or affinity_open_file to open an existing fileaffinity_screenshot to confirm the current state visuallyExplore menus before clicking — never guess menu item names:
affinity_get_menus with a top-level menu name (e.g., "File", "Edit", "Pixel") to list all itemsaffinity_get_submenu for items that have submenus (e.g., File > Export, Pixel > Filters)affinity_click_menu with the full path array (e.g., ["File", "Export", "Export…"])Menu paths use an array from the menu bar item down to the target item. Maximum depth is 4 levels.
When dialogs, panels, or unknown UI appears:
affinity_get_ui to list all UI elements in the front window (buttons, text fields, checkboxes, etc.)affinity_click_ui with the element's description/title and type (button, checkbox, text field, etc.)Use the tool selection + mouse action pattern:
affinity_select_tool with the desired tool (e.g., "rectangle", "ellipse", "pen")affinity_mouse_action with action: "drag" and start/end coordinates to draw the shapeaffinity_screenshot to verify the resultFor the rectangle tool: drag defines the bounding box. For ellipse: drag defines the bounding ellipse. For pen: click to place anchor points.
affinity_select_tool("text") to activate the text toolaffinity_mouse_action with action: "click" at the desired position, or action: "drag" to create a text frameaffinity_type_text with the text contentaffinity_keystroke for formatting shortcuts (Cmd+B for bold, Cmd+I for italic, etc.)affinity_export with the desired format (png, jpg, svg, pdf, etc.) — this opens the export dialogaffinity_get_ui to inspect the export dialog optionsaffinity_click_ui to set options (quality, area, etc.)affinity_click_ui to click the final export/save buttonaffinity_get_ui to inspect, affinity_click_ui or affinity_type_text to set the pathaffinity_filters to list available filters under Pixel > Filtersaffinity_click_menu with the filter path (e.g., ["Pixel", "Filters", "Blur", "Gaussian Blur…"])affinity_get_ui to inspect the filter dialogaffinity_click_ui to adjust parameters and confirmaffinity_add_layer to add a new layer (pixel, mask, adjustment, live_filter, fill, pattern)affinity_click_menu for layer operations available in the menu (merge, group, etc.)affinity_document_ops for document-level operations (flatten, flip, rotate, clip/unclip canvas)Call affinity_undo_redo with action: "undo" and a times count to step back. Use action: "redo" to step forward.
Take screenshots liberally between steps. Call affinity_screenshot after every significant action to:
This is the single most important practice. Without screenshots, you are working blind.
The tools include built-in sleep delays after actions, but some operations need extra time:
affinity_get_ui to confirm the dialog appearedDialogs are modal — they block interaction with the rest of the app until dismissed:
affinity_get_ui before interactingaffinity_click_ui for buttons (OK, Cancel, Save, Don't Save)affinity_key_code with code 53 (Escape) to dismiss dialogs without savingaffinity_key_code with code 36 (Return) to confirm the default actionThe App Store version of Affinity registers as "Affinity Affinity Store" in System Events. If tools return errors about not finding the process, the user may need to update PROCESS_NAME in index.ts to match their installation (e.g., "Affinity 2" for non-App Store versions).
Common shortcuts to use with affinity_keystroke:
Use with affinity_key_code:
For complete tool API documentation with all parameters, types, and defaults, see references/tool-reference.md.
For step-by-step workflow recipes, see references/workflows.md.
npx claudepluginhub sekharmalla/affinity-mcp-serverCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.