@alisaitteke/photoshop-mcp 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.de.md +21 -0
  2. package/README.es.md +20 -0
  3. package/README.ja.md +20 -0
  4. package/README.md +104 -8
  5. package/README.tr.md +70 -1
  6. package/README.zh-CN.md +17 -0
  7. package/dist/api/extendscript.d.ts +54 -0
  8. package/dist/api/extendscript.d.ts.map +1 -1
  9. package/dist/api/extendscript.js +535 -0
  10. package/dist/api/extendscript.js.map +1 -1
  11. package/dist/core/server.d.ts.map +1 -1
  12. package/dist/core/server.js +10 -0
  13. package/dist/core/server.js.map +1 -1
  14. package/dist/platform/macos-detector.d.ts.map +1 -1
  15. package/dist/platform/macos-detector.js +7 -4
  16. package/dist/platform/macos-detector.js.map +1 -1
  17. package/dist/platform/macos-executor.d.ts +11 -0
  18. package/dist/platform/macos-executor.d.ts.map +1 -1
  19. package/dist/platform/macos-executor.js +103 -32
  20. package/dist/platform/macos-executor.js.map +1 -1
  21. package/dist/prompts/registry.d.ts +1 -1
  22. package/dist/prompts/registry.d.ts.map +1 -1
  23. package/dist/prompts/registry.js +2 -0
  24. package/dist/prompts/registry.js.map +1 -1
  25. package/dist/prompts/templates/csv-to-cards.d.ts +3 -0
  26. package/dist/prompts/templates/csv-to-cards.d.ts.map +1 -0
  27. package/dist/prompts/templates/csv-to-cards.js +43 -0
  28. package/dist/prompts/templates/csv-to-cards.js.map +1 -0
  29. package/dist/tools/color-adjustment-tools.d.ts +4 -0
  30. package/dist/tools/color-adjustment-tools.d.ts.map +1 -0
  31. package/dist/tools/color-adjustment-tools.js +147 -0
  32. package/dist/tools/color-adjustment-tools.js.map +1 -0
  33. package/dist/tools/data-tools.d.ts +4 -0
  34. package/dist/tools/data-tools.d.ts.map +1 -0
  35. package/dist/tools/data-tools.js +132 -0
  36. package/dist/tools/data-tools.js.map +1 -0
  37. package/dist/tools/export-tools.d.ts +4 -0
  38. package/dist/tools/export-tools.d.ts.map +1 -0
  39. package/dist/tools/export-tools.js +62 -0
  40. package/dist/tools/export-tools.js.map +1 -0
  41. package/dist/tools/recipes/csv-to-cards.d.ts +4 -0
  42. package/dist/tools/recipes/csv-to-cards.d.ts.map +1 -0
  43. package/dist/tools/recipes/csv-to-cards.js +257 -0
  44. package/dist/tools/recipes/csv-to-cards.js.map +1 -0
  45. package/dist/tools/recipes/index.d.ts +1 -1
  46. package/dist/tools/recipes/index.d.ts.map +1 -1
  47. package/dist/tools/recipes/index.js +3 -0
  48. package/dist/tools/recipes/index.js.map +1 -1
  49. package/dist/tools/stack-tools.d.ts +4 -0
  50. package/dist/tools/stack-tools.d.ts.map +1 -0
  51. package/dist/tools/stack-tools.js +72 -0
  52. package/dist/tools/stack-tools.js.map +1 -0
  53. package/dist/tools/style-tools.d.ts +4 -0
  54. package/dist/tools/style-tools.d.ts.map +1 -0
  55. package/dist/tools/style-tools.js +75 -0
  56. package/dist/tools/style-tools.js.map +1 -0
  57. package/dist/ui/cli.js +7 -1
  58. package/dist/ui/cli.js.map +1 -1
  59. package/dist/ui/providers/anthropic.d.ts.map +1 -1
  60. package/dist/ui/providers/anthropic.js +11 -1
  61. package/dist/ui/providers/anthropic.js.map +1 -1
  62. package/dist/ui/providers/types.d.ts +1 -0
  63. package/dist/ui/providers/types.d.ts.map +1 -1
  64. package/dist/ui/security/session-token.d.ts +24 -0
  65. package/dist/ui/security/session-token.d.ts.map +1 -0
  66. package/dist/ui/security/session-token.js +72 -0
  67. package/dist/ui/security/session-token.js.map +1 -0
  68. package/dist/ui/server.d.ts +4 -0
  69. package/dist/ui/server.d.ts.map +1 -1
  70. package/dist/ui/server.js +79 -11
  71. package/dist/ui/server.js.map +1 -1
  72. package/dist/utils/js-string.d.ts.map +1 -1
  73. package/dist/utils/js-string.js +7 -1
  74. package/dist/utils/js-string.js.map +1 -1
  75. package/package.json +11 -4
  76. package/web/dist/assets/{index-uXgjjmy3.js → index-SNfxhJjr.js} +89 -85
  77. package/web/dist/assets/index-vi5C3hqd.css +1 -0
  78. package/web/dist/index.html +2 -2
  79. package/web/dist/assets/index-BN7ku4VU.css +0 -1
package/README.de.md CHANGED
@@ -115,6 +115,27 @@ Die Authentifizierungsmethode wird pro Anbieter in `~/.photoshop-mcp/data.db` ge
115
115
  photoshop-mcp-ui [--port 5174] [--host 127.0.0.1] [--no-open]
116
116
  ```
117
117
 
118
+ ### Sicherheit der lokalen API
119
+
120
+ Der UI-Server speichert deine Provider-API-Schlüssel und kann Photoshop
121
+ steuern, daher ist `/api/*` nicht für alles offen, was auf deinem Rechner
122
+ läuft. Jede Anfrage muss drei Prüfungen bestehen:
123
+
124
+ 1. **Host** — muss die Loopback-Adresse (oder der via `--host` gebundene Host)
125
+ auf dem Port des Servers sein. Blockiert DNS-Rebinding.
126
+ 2. **Origin** — falls vorhanden, muss sie dem Origin der UI entsprechen.
127
+ Blockiert Cross-Origin-Aufrufe aus dem Browser.
128
+ 3. **Session-Token** — ein zufälliges Geheimnis pro Serverstart. Blockiert
129
+ andere lokale Prozesse, die zwar jeden Header fälschen, aber das Token nicht
130
+ lesen können.
131
+
132
+ Der Browser muss sich nicht um das Token kümmern: Der Server injiziert es in
133
+ die ausgelieferte `index.html`. Für Skripte liest du es aus
134
+ `~/.photoshop-mcp/ui-session.json` (chmod 600) und sendest es als
135
+ `x-psmcp-token` oder `Authorization: Bearer`; alternativ setzt du vor dem Start
136
+ `PSMCP_UI_TOKEN` auf ein eigenes Token. Anfragen ohne gültiges Token erhalten
137
+ `401 unauthorized`.
138
+
118
139
  ### Hinweise
119
140
 
120
141
  - Der Agent ist auf Photoshop-MCP-Werkzeuge beschränkt – integrierte Shell-, Datei-
package/README.es.md CHANGED
@@ -99,6 +99,26 @@ El método de autenticación se almacena por proveedor en `~/.photoshop-mcp/data
99
99
  photoshop-mcp-ui [--port 5174] [--host 127.0.0.1] [--no-open]
100
100
  ```
101
101
 
102
+ ### Seguridad de la API local
103
+
104
+ El servidor de la UI guarda tus claves de API de proveedores y puede controlar
105
+ Photoshop, así que `/api/*` no está abierto a todo lo que se ejecute en tu
106
+ máquina. Cada petición debe superar tres comprobaciones:
107
+
108
+ 1. **Host** — debe ser la dirección de loopback (o el `--host` al que enlazaste)
109
+ en el puerto del servidor. Bloquea el DNS rebinding.
110
+ 2. **Origin** — si está presente, debe coincidir con el origen de la propia UI.
111
+ Bloquea las llamadas cross-origin desde el navegador.
112
+ 3. **Token de sesión** — un secreto aleatorio por arranque. Bloquea a otros
113
+ procesos locales, que pueden falsificar cualquier cabecera pero no leer el
114
+ token.
115
+
116
+ El navegador no necesita gestionar el token: el servidor lo inyecta en el
117
+ `index.html` que sirve. Para scripts, léelo de
118
+ `~/.photoshop-mcp/ui-session.json` (chmod 600) y envíalo como `x-psmcp-token` o
119
+ `Authorization: Bearer`, o fija el tuyo con `PSMCP_UI_TOKEN` antes de arrancar
120
+ el servidor. Las peticiones sin un token válido reciben `401 unauthorized`.
121
+
102
122
  ### Notas
103
123
 
104
124
  - El agente está restringido únicamente a las herramientas de Photoshop MCP — las herramientas integradas de shell, archivos y web están deshabilitadas.
package/README.ja.md CHANGED
@@ -99,6 +99,26 @@ npx -p @alisaitteke/photoshop-mcp photoshop-mcp-ui
99
99
  photoshop-mcp-ui [--port 5174] [--host 127.0.0.1] [--no-open]
100
100
  ```
101
101
 
102
+ ### ローカル API のセキュリティ
103
+
104
+ UI サーバーはプロバイダーの API キーを保存し、Photoshop を操作できます。その
105
+ ため `/api/*` はマシン上で動作するすべてのプロセスに開かれてはいません。各
106
+ リクエストは次の 3 つのチェックを通過する必要があります。
107
+
108
+ 1. **Host** — サーバーのポート上のループバックアドレス(または `--host` で
109
+ バインドしたホスト)である必要があります。DNS リバインディングを防ぎます。
110
+ 2. **Origin** — 存在する場合は UI 自身のオリジンと一致する必要があります。
111
+ ブラウザからのクロスオリジン呼び出しを防ぎます。
112
+ 3. **セッショントークン** — 起動ごとに生成されるランダムな秘密値です。ヘッダー
113
+ は偽装できてもトークンは読み取れない、他のローカルプロセスを防ぎます。
114
+
115
+ ブラウザ側でトークンを扱う必要はありません。サーバーが配信する `index.html`
116
+ に注入します。スクリプトから使う場合は
117
+ `~/.photoshop-mcp/ui-session.json`(chmod 600)から読み取り、`x-psmcp-token`
118
+ または `Authorization: Bearer` ヘッダーで送信するか、サーバー起動前に
119
+ `PSMCP_UI_TOKEN` で任意のトークンを固定してください。有効なトークンがない
120
+ リクエストは `401 unauthorized` を返します。
121
+
102
122
  ### 注意事項
103
123
 
104
124
  - エージェントはPhotoshop MCPツールのみに制限されています。組み込みのシェル・ファイル・Webツールは無効化されています。
package/README.md CHANGED
@@ -18,6 +18,7 @@
18
18
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
19
19
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue.svg)](https://www.typescriptlang.org/)
20
20
  [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS-lightgrey.svg)]()
21
+ [![MCP Registry](https://img.shields.io/badge/MCP%20Registry-io.github.alisaitteke%2Fphotoshop--mcp-purple.svg)](https://registry.modelcontextprotocol.io)
21
22
 
22
23
  A Model Context Protocol (MCP) server that enables AI assistants like Claude and Cursor to control Adobe Photoshop programmatically. This allows you to create designs, manipulate images, and automate Photoshop workflows through natural language commands while working in your IDE — or through the bundled **standalone web UI**, which supports both API keys and CLI subscription accounts (Claude Code / Gemini CLI). The UI also offers an opt-in **Action Plan (beta)** mode that plans every Photoshop step in one LLM call, then runs them in a single pass.
23
24
 
@@ -126,6 +127,25 @@ Auth method is stored per provider in `~/.photoshop-mcp/data.db` (`authMethod`:
126
127
  photoshop-mcp-ui [--port 5174] [--host 127.0.0.1] [--no-open]
127
128
  ```
128
129
 
130
+ ### Local API security
131
+
132
+ The UI server stores your provider API keys and can drive Photoshop, so `/api/*`
133
+ is not open to everything running on your machine. Each request must pass three
134
+ checks:
135
+
136
+ 1. **Host** — must be the loopback address (or the `--host` you bound to) on the
137
+ server's port. Blocks DNS rebinding.
138
+ 2. **Origin** — when present, must match the UI's own origin. Blocks
139
+ cross-origin browser callers.
140
+ 3. **Session token** — a random per-start secret. Blocks other local processes,
141
+ which can forge any header but cannot read the token.
142
+
143
+ The browser never has to deal with the token: the server injects it into the
144
+ `index.html` it serves. For scripting, read it from
145
+ `~/.photoshop-mcp/ui-session.json` (chmod 600) and send it as `x-psmcp-token` or
146
+ `Authorization: Bearer`, or pin your own with `PSMCP_UI_TOKEN` before starting
147
+ the server. Requests without a valid token get `401 unauthorized`.
148
+
129
149
  ### Notes
130
150
 
131
151
  - The agent is restricted to Photoshop MCP tools only — built-in shell, file
@@ -152,16 +172,16 @@ requests into reliable Photoshop actions:
152
172
  - **Server `instructions`** — workflow contract advertised on MCP `initialize`
153
173
  (ping once, state-before-action, prefer recipes, error recovery). See
154
174
  [`src/prompts/instructions.ts`](src/prompts/instructions.ts).
155
- - **MCP `prompts` primitive** — 22 pre-engineered templates (15 recipe + 7 guide:
175
+ - **MCP `prompts` primitive** — 23 pre-engineered templates (16 recipe + 7 guide:
156
176
  `ps.enhance_portrait`, `ps.remove_background`, `ps.generative_fill`, …)
157
177
  via `prompts/list` and `prompts/get`.
158
- - **Recipe tools** — 15 outcome-oriented `photoshop_recipe_*` tools (remove
178
+ - **Recipe tools** — 16 outcome-oriented `photoshop_recipe_*` tools (remove
159
179
  background, enhance portrait, prepare for web, export social variants, color
160
180
  grade, frequency separation, batch mockup, organize layers, gradient fade,
161
181
  sky blend, dodge & burn, remove distraction, split carousel, batch watermark,
162
- passport photo). Each wraps steps in a single
163
- Photoshop history state (one Undo reverts all). **89 tools total** (74 atomic
164
- + 15 recipe).
182
+ passport photo, csv to cards). Each wraps steps in a single
183
+ Photoshop history state (one Undo reverts all). **102 tools total** (86 atomic
184
+ + 16 recipe).
165
185
  - **Generative AI** — `photoshop_generative_fill`, `photoshop_generative_remove`,
166
186
  `photoshop_generative_expand`, `photoshop_generative_upscale`, `photoshop_sky_replacement`,
167
187
  `photoshop_generate_image` (Firefly via ExtendScript; Adobe account + credits required).
@@ -368,6 +388,17 @@ Note: framing is approximated from subject bounds — official acceptance is not
368
388
 
369
389
  Equivalent MCP prompt template: `ps.passport_photo` with `{ spec: "us_2x2", make_sheet: "true" }`.
370
390
 
391
+ #### 🪪 CSV → cards (data-driven graphics)
392
+
393
+ <img src="./images/recipe-csv-cards.svg" alt="CSV rows become data sets; one personalized card exported per row" width="640" />
394
+
395
+ ```
396
+ Generate a name card for every row in ~/cards/speakers.csv using the open template PSD.
397
+ PNG output to ~/cards/out — one file per row, named after the row.
398
+ ```
399
+
400
+ Equivalent MCP prompt template: `ps.csv_to_cards` with `{ csv_path: "~/cards/speakers.csv", output_dir: "~/cards/out", format: "PNG" }`.
401
+
371
402
  ### More examples
372
403
 
373
404
  <details>
@@ -566,15 +597,20 @@ Never guess — read get_state after a failure and propose the next single step.
566
597
  - **Supports Photoshop 2012-2025+**
567
598
  - **ExtendScript API**: Universal compatibility via AppleScript/COM automation
568
599
  - **Auto-Detection**: Automatically finds Photoshop installation on your system
569
- - **89 Tools**: 74 atomic `photoshop_*` + 15 recipe `photoshop_recipe_*`
570
- - **AI/Prompt Layer**: 22 MCP prompt templates (15 recipe + 7 guide), server instructions, state/preview/capabilities tools
600
+ - **102 Tools**: 86 atomic `photoshop_*` + 16 recipe `photoshop_recipe_*`
601
+ - **AI/Prompt Layer**: 23 MCP prompt templates (16 recipe + 7 guide), server instructions, state/preview/capabilities tools
571
602
  - **Document Management**: Create, open, save, close, crop documents
572
603
  - **Layer Operations**: Create, delete, duplicate, merge, transform layers
573
604
  - **Layer Properties**: Opacity, blend modes, visibility, locking
605
+ - **Layer Styles**: Drop shadow, outer glow, stroke, bevel & emboss
574
606
  - **Text Formatting**: Font, size, color, alignment controls
575
607
  - **Image Placement**: Place images, open files, fit to document
576
608
  - **Filters**: Gaussian Blur, Sharpen, Noise, Motion Blur
577
609
  - **Color Adjustments**: Brightness/Contrast, Hue/Saturation, Curves, Auto Levels/Contrast
610
+ - **Color Grading**: 3D LUT (Color Lookup) layers, Vibrance, Exposure, Photo Filter, Gradient Map
611
+ - **Data-Driven Graphics**: CSV/variables XML → one image per row ("mail merge for images")
612
+ - **Image Stacking**: Mean/median stack modes for tourist removal & noise reduction
613
+ - **Modern Export**: PNG/JPEG plus WebP/AVIF (native, PS 23.2+)
578
614
  - **Selections & Masks**: Rectangular selections, select subject, content-aware fill, gradient mask, layer masks
579
615
  - **History Control**: Undo/Redo operations, view history states
580
616
  - **Actions**: Play recorded actions, execute custom scripts
@@ -583,6 +619,17 @@ Never guess — read get_state after a failure and propose the next single step.
583
619
 
584
620
  ## Installation
585
621
 
622
+ ### One-click install
623
+
624
+ [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=photoshop&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBhbGlzYWl0dGVrZS9waG90b3Nob3AtbWNwIl19)
625
+ [![Install in VS Code](https://img.shields.io/badge/Install%20in-VS%20Code-0098FF)](https://vscode.dev/redirect/mcp/install?name=photoshop&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40alisaitteke%2Fphotoshop-mcp%22%5D%7D)
626
+
627
+ Or from a terminal — Claude Code:
628
+
629
+ ```bash
630
+ claude mcp add photoshop -- npx -y @alisaitteke/photoshop-mcp
631
+ ```
632
+
586
633
  ### Using NPX (Recommended)
587
634
 
588
635
  No installation required! Just configure your MCP client:
@@ -631,6 +678,54 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
631
678
  }
632
679
  ```
633
680
 
681
+ **Can't find the config file?** In Claude Desktop, open **Settings → Developer → Edit Config** — it opens the correct path for your install (the `%APPDATA%` path may differ on some setups).
682
+
683
+ ### For Claude Code
684
+
685
+ Use the [Claude Code CLI](https://code.claude.com/docs/en/agent-sdk/mcp) or the [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk/mcp) with the same MCP server entry.
686
+
687
+ **Recommended (CLI):**
688
+
689
+ ```bash
690
+ claude mcp add photoshop -- npx -y @alisaitteke/photoshop-mcp
691
+ ```
692
+
693
+ **Manual JSON** — merge into your project `.mcp.json` or Claude Code MCP settings (see [`examples/claude-code-mcp.json`](examples/claude-code-mcp.json)):
694
+
695
+ ```json
696
+ {
697
+ "mcpServers": {
698
+ "photoshop": {
699
+ "command": "npx",
700
+ "args": ["-y", "@alisaitteke/photoshop-mcp"],
701
+ "env": {
702
+ "LOG_LEVEL": "1"
703
+ }
704
+ }
705
+ }
706
+ }
707
+ ```
708
+
709
+ **Agent SDK (TypeScript)** — pass the same `mcpServers` block in your `query()` options:
710
+
711
+ ```typescript
712
+ import { query } from '@anthropic-ai/claude-agent-sdk';
713
+
714
+ const q = query({
715
+ prompt: 'List open documents in Photoshop',
716
+ options: {
717
+ mcpServers: {
718
+ photoshop: {
719
+ command: 'npx',
720
+ args: ['-y', '@alisaitteke/photoshop-mcp'],
721
+ env: { LOG_LEVEL: '1' },
722
+ },
723
+ },
724
+ allowedTools: ['mcp__photoshop__*'],
725
+ },
726
+ });
727
+ ```
728
+
634
729
  ### Environment Variables
635
730
 
636
731
  - `PHOTOSHOP_PATH`: (Optional) Specify custom Photoshop installation path
@@ -733,7 +828,8 @@ Common connection, scripting, and logging issues:
733
828
  | Symptom | Likely cause | Fix |
734
829
  |---|---|---|
735
830
  | `cli_not_found` | Claude Code / Gemini CLI not installed | `npm i -g @anthropic-ai/claude-code` or `npm i -g @google/gemini-cli` |
736
- | `not_authenticated` | No OAuth session | Run `claude auth login` or `gemini auth login` in Terminal |
831
+ | `not_authenticated` | No CLI OAuth session (API key / SDK auth does not count) | Run `claude auth login` or `gemini auth login` in Terminal, or switch to **API key** auth |
832
+ | SDK client works, UI CLI mode fails | SDK/API credentials are separate from Claude Code CLI OAuth | Use **API key** in the standalone UI, or log in with `claude auth login` for CLI account mode |
737
833
  | `claude` / `gemini` not on `PATH` | Custom install location | Settings → **CLI path** → **Check connection** |
738
834
  | Chat works in IDE but not UI (CLI mode) | OAuth tokens are CLI-only | Use **CLI account** in UI; API keys and CLI sessions are separate |
739
835
  | Gemini multi-turn feels forgetful | Headless CLI may start a fresh session each turn | Known limitation; history is prepended to the prompt (MVP) |
package/README.tr.md CHANGED
@@ -104,6 +104,26 @@ kullanır ve değişmeden çalışmaya devam eder.
104
104
  photoshop-mcp-ui [--port 5174] [--host 127.0.0.1] [--no-open]
105
105
  ```
106
106
 
107
+ ### Yerel API güvenliği
108
+
109
+ UI sunucusu sağlayıcı API anahtarlarınızı saklar ve Photoshop'u sürebilir; bu
110
+ nedenle `/api/*` makinenizde çalışan her şeye açık değildir. Her istek üç
111
+ kontrolden geçer:
112
+
113
+ 1. **Host** — sunucunun portunda loopback adresi (veya bağlandığınız `--host`)
114
+ olmalıdır. DNS rebinding saldırısını engeller.
115
+ 2. **Origin** — varsa UI'ın kendi origin'iyle eşleşmelidir. Çapraz kaynaklı
116
+ tarayıcı isteklerini engeller.
117
+ 3. **Oturum token'ı** — her başlatmada üretilen rastgele bir sır. Header'ları
118
+ taklit edebilen ama token'ı okuyamayan diğer yerel süreçleri engeller.
119
+
120
+ Tarayıcının token ile uğraşması gerekmez: sunucu token'ı servis ettiği
121
+ `index.html` içine enjekte eder. Script yazarken token'ı
122
+ `~/.photoshop-mcp/ui-session.json` (chmod 600) dosyasından okuyup `x-psmcp-token`
123
+ veya `Authorization: Bearer` header'ı olarak gönderin; ya da sunucuyu
124
+ başlatmadan önce `PSMCP_UI_TOKEN` ile kendi token'ınızı sabitleyin. Geçerli
125
+ token içermeyen istekler `401 unauthorized` alır.
126
+
107
127
  ### Notlar
108
128
 
109
129
  - Ajan yalnızca Photoshop MCP araçlarıyla sınırlıdır — dahili kabuk, dosya
@@ -608,6 +628,54 @@ Claude Desktop yapılandırmanıza ekleyin (macOS'ta `~/Library/Application Supp
608
628
  }
609
629
  ```
610
630
 
631
+ **Yapılandırma dosyasını bulamıyor musunuz?** Claude Desktop'ta **Settings → Developer → Edit Config** yolunu kullanın — kurulumunuza uygun dosyayı açar (`%APPDATA%` yolu her zaman aynı olmayabilir).
632
+
633
+ ### Claude Code için
634
+
635
+ [Claude Code CLI](https://code.claude.com/docs/en/agent-sdk/mcp) veya [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk/mcp) ile aynı MCP sunucu girdisini kullanın.
636
+
637
+ **Önerilen (CLI):**
638
+
639
+ ```bash
640
+ claude mcp add photoshop -- npx -y @alisaitteke/photoshop-mcp
641
+ ```
642
+
643
+ **Manuel JSON** — proje `.mcp.json` dosyanıza veya Claude Code MCP ayarlarınıza ekleyin ([`examples/claude-code-mcp.json`](examples/claude-code-mcp.json)):
644
+
645
+ ```json
646
+ {
647
+ "mcpServers": {
648
+ "photoshop": {
649
+ "command": "npx",
650
+ "args": ["-y", "@alisaitteke/photoshop-mcp"],
651
+ "env": {
652
+ "LOG_LEVEL": "1"
653
+ }
654
+ }
655
+ }
656
+ }
657
+ ```
658
+
659
+ **Agent SDK (TypeScript)** — `query()` seçeneklerinde aynı `mcpServers` bloğunu geçirin:
660
+
661
+ ```typescript
662
+ import { query } from '@anthropic-ai/claude-agent-sdk';
663
+
664
+ const q = query({
665
+ prompt: 'Photoshop\'ta açık belgeleri listele',
666
+ options: {
667
+ mcpServers: {
668
+ photoshop: {
669
+ command: 'npx',
670
+ args: ['-y', '@alisaitteke/photoshop-mcp'],
671
+ env: { LOG_LEVEL: '1' },
672
+ },
673
+ },
674
+ allowedTools: ['mcp__photoshop__*'],
675
+ },
676
+ });
677
+ ```
678
+
611
679
  ### Ortam Değişkenleri
612
680
 
613
681
  - `PHOTOSHOP_PATH`: (İsteğe bağlı) Özel Photoshop kurulum yolunu belirtin
@@ -717,7 +785,8 @@ Yaygın bağlantı, betik ve günlük kaydı sorunları:
717
785
  | Belirti | Olası neden | Düzeltme |
718
786
  |---|---|---|
719
787
  | `cli_not_found` | Claude Code / Gemini CLI yüklü değil | `npm i -g @anthropic-ai/claude-code` veya `npm i -g @google/gemini-cli` |
720
- | `not_authenticated` | OAuth oturumu yok | Terminal'de `claude auth login` veya `gemini auth login` çalıştırın |
788
+ | `not_authenticated` | CLI OAuth oturumu yok (API anahtarı / SDK oturumu sayılmaz) | Terminal'de `claude auth login` veya `gemini auth login` çalıştırın veya **API key** moduna geçin |
789
+ | SDK istemcisi çalışıyor, UI CLI modu başarısız | SDK/API kimlik bilgileri Claude Code CLI OAuth'tan ayrıdır | Bağımsız UI'da **API key** kullanın veya CLI hesabı için `claude auth login` çalıştırın |
721
790
  | `claude` / `gemini` `PATH`'de yok | Özel kurulum konumu | Ayarlar → **CLI path** → **Check connection** |
722
791
  | Sohbet IDE'de çalışıyor ama UI'da çalışmıyor (CLI modu) | OAuth tokenları yalnızca CLI'ya özgü | UI'da **CLI account** kullanın; API anahtarları ve CLI oturumları ayrıdır |
723
792
  | Gemini çok turlu konuşmalarda unutkanlık gösteriyor | Başsız CLI her turda yeni oturum açabilir | Bilinen kısıtlama; geçmiş isteme eklenir (MVP) |
package/README.zh-CN.md CHANGED
@@ -99,6 +99,23 @@ npx -p @alisaitteke/photoshop-mcp photoshop-mcp-ui
99
99
  photoshop-mcp-ui [--port 5174] [--host 127.0.0.1] [--no-open]
100
100
  ```
101
101
 
102
+ ### 本地 API 安全
103
+
104
+ UI 服务器保存着你的模型提供方 API 密钥,并且可以驱动 Photoshop,因此 `/api/*`
105
+ 并不对本机上运行的所有程序开放。每个请求都必须通过三项检查:
106
+
107
+ 1. **Host** — 必须是服务器端口上的回环地址(或你通过 `--host` 绑定的主机),
108
+ 用于阻止 DNS 重绑定攻击。
109
+ 2. **Origin** — 如果存在,必须与 UI 自身的来源一致,用于阻止浏览器发起的跨源
110
+ 调用。
111
+ 3. **会话令牌** — 每次启动生成的随机密钥,用于阻止其他本地进程;它们可以伪造
112
+ 任意请求头,却无法读取该令牌。
113
+
114
+ 浏览器无需处理令牌:服务器会将其注入所返回的 `index.html`。编写脚本时,请从
115
+ `~/.photoshop-mcp/ui-session.json`(chmod 600)读取令牌,并通过
116
+ `x-psmcp-token` 或 `Authorization: Bearer` 请求头发送;也可以在启动服务器前用
117
+ `PSMCP_UI_TOKEN` 指定自己的令牌。缺少有效令牌的请求会收到 `401 unauthorized`。
118
+
102
119
  ### 注意事项
103
120
 
104
121
  - 代理仅限于使用 Photoshop MCP 工具——内置的 shell、文件和网络工具已禁用。
@@ -314,6 +314,60 @@ export declare const ExtendScriptSnippets: {
314
314
  generativeUpscale: (targetScale: number) => string;
315
315
  skyReplacement: (skyImagePath: string) => string;
316
316
  generateImage: (prompt: string, width: number, height: number) => string;
317
+ /**
318
+ * Apply a layer style (drop shadow / outer glow / stroke / bevel) via Action Manager layerEffects.
319
+ */
320
+ applyLayerStyle: (options: {
321
+ style: "drop_shadow" | "outer_glow" | "stroke" | "bevel_emboss";
322
+ red: number;
323
+ green: number;
324
+ blue: number;
325
+ opacity: number;
326
+ size: number;
327
+ distance: number;
328
+ angle: number;
329
+ }) => string;
330
+ /**
331
+ * Color Lookup (3D LUT) adjustment layer — cinematic grades via built-in or file-based LUTs.
332
+ */
333
+ applyLut: (lut: string) => string;
334
+ /**
335
+ * Vibrance adjustment layer.
336
+ */
337
+ adjustVibrance: (vibrance: number, saturation: number) => string;
338
+ /**
339
+ * Exposure adjustment layer.
340
+ */
341
+ adjustExposure: (exposure: number, offset: number, gamma: number) => string;
342
+ /**
343
+ * Photo Filter adjustment layer (warming/cooling/tint with density).
344
+ */
345
+ applyPhotoFilter: (red: number, green: number, blue: number, density: number, preserveLuminosity: boolean) => string;
346
+ /**
347
+ * Gradient Map adjustment layer (black→white custom gradient by default).
348
+ */
349
+ applyGradientMap: (reverse: boolean) => string;
350
+ /**
351
+ * List data sets defined on the active document (data-driven graphics).
352
+ */
353
+ listDataSets: () => string;
354
+ /**
355
+ * Import variables/data sets XML (Image > Variables > Data Sets > Import).
356
+ */
357
+ importDataSets: (xmlPath: string) => string;
358
+ /**
359
+ * Batch-export one file per data set: applies each data set then saves a copy.
360
+ */
361
+ applyDataSetsExport: (outputDir: string, format: "JPEG" | "PNG" | "PSD", datasetNames: string[]) => string;
362
+ /**
363
+ * Load image files into one document, convert to a smart object and apply a stack mode.
364
+ * Classic "remove tourists with median stack" without any generative AI.
365
+ */
366
+ imageStackMode: (files: string[], mode: string) => string;
367
+ /**
368
+ * Export a copy of the active document as PNG/JPEG (Save for Web) or WebP/AVIF (native, PS 23.2+).
369
+ */
370
+ exportAs: (filePath: string, format: "PNG" | "JPEG" | "WEBP" | "AVIF", quality: number) => string;
317
371
  };
318
372
  /**
319
373
  * Generate ExtendScript code with error handling
@@ -1 +1 @@
1
- {"version":3,"file":"extendscript.d.ts","sourceRoot":"","sources":["../../src/api/extendscript.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extendscript.d.ts","sourceRoot":"","sources":["../../src/api/extendscript.ts"],"names":[],"mappings":"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"}