@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.
- package/README.de.md +21 -0
- package/README.es.md +20 -0
- package/README.ja.md +20 -0
- package/README.md +104 -8
- package/README.tr.md +70 -1
- package/README.zh-CN.md +17 -0
- package/dist/api/extendscript.d.ts +54 -0
- package/dist/api/extendscript.d.ts.map +1 -1
- package/dist/api/extendscript.js +535 -0
- package/dist/api/extendscript.js.map +1 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +10 -0
- package/dist/core/server.js.map +1 -1
- package/dist/platform/macos-detector.d.ts.map +1 -1
- package/dist/platform/macos-detector.js +7 -4
- package/dist/platform/macos-detector.js.map +1 -1
- package/dist/platform/macos-executor.d.ts +11 -0
- package/dist/platform/macos-executor.d.ts.map +1 -1
- package/dist/platform/macos-executor.js +103 -32
- package/dist/platform/macos-executor.js.map +1 -1
- package/dist/prompts/registry.d.ts +1 -1
- package/dist/prompts/registry.d.ts.map +1 -1
- package/dist/prompts/registry.js +2 -0
- package/dist/prompts/registry.js.map +1 -1
- package/dist/prompts/templates/csv-to-cards.d.ts +3 -0
- package/dist/prompts/templates/csv-to-cards.d.ts.map +1 -0
- package/dist/prompts/templates/csv-to-cards.js +43 -0
- package/dist/prompts/templates/csv-to-cards.js.map +1 -0
- package/dist/tools/color-adjustment-tools.d.ts +4 -0
- package/dist/tools/color-adjustment-tools.d.ts.map +1 -0
- package/dist/tools/color-adjustment-tools.js +147 -0
- package/dist/tools/color-adjustment-tools.js.map +1 -0
- package/dist/tools/data-tools.d.ts +4 -0
- package/dist/tools/data-tools.d.ts.map +1 -0
- package/dist/tools/data-tools.js +132 -0
- package/dist/tools/data-tools.js.map +1 -0
- package/dist/tools/export-tools.d.ts +4 -0
- package/dist/tools/export-tools.d.ts.map +1 -0
- package/dist/tools/export-tools.js +62 -0
- package/dist/tools/export-tools.js.map +1 -0
- package/dist/tools/recipes/csv-to-cards.d.ts +4 -0
- package/dist/tools/recipes/csv-to-cards.d.ts.map +1 -0
- package/dist/tools/recipes/csv-to-cards.js +257 -0
- package/dist/tools/recipes/csv-to-cards.js.map +1 -0
- package/dist/tools/recipes/index.d.ts +1 -1
- package/dist/tools/recipes/index.d.ts.map +1 -1
- package/dist/tools/recipes/index.js +3 -0
- package/dist/tools/recipes/index.js.map +1 -1
- package/dist/tools/stack-tools.d.ts +4 -0
- package/dist/tools/stack-tools.d.ts.map +1 -0
- package/dist/tools/stack-tools.js +72 -0
- package/dist/tools/stack-tools.js.map +1 -0
- package/dist/tools/style-tools.d.ts +4 -0
- package/dist/tools/style-tools.d.ts.map +1 -0
- package/dist/tools/style-tools.js +75 -0
- package/dist/tools/style-tools.js.map +1 -0
- package/dist/ui/cli.js +7 -1
- package/dist/ui/cli.js.map +1 -1
- package/dist/ui/providers/anthropic.d.ts.map +1 -1
- package/dist/ui/providers/anthropic.js +11 -1
- package/dist/ui/providers/anthropic.js.map +1 -1
- package/dist/ui/providers/types.d.ts +1 -0
- package/dist/ui/providers/types.d.ts.map +1 -1
- package/dist/ui/security/session-token.d.ts +24 -0
- package/dist/ui/security/session-token.d.ts.map +1 -0
- package/dist/ui/security/session-token.js +72 -0
- package/dist/ui/security/session-token.js.map +1 -0
- package/dist/ui/server.d.ts +4 -0
- package/dist/ui/server.d.ts.map +1 -1
- package/dist/ui/server.js +79 -11
- package/dist/ui/server.js.map +1 -1
- package/dist/utils/js-string.d.ts.map +1 -1
- package/dist/utils/js-string.js +7 -1
- package/dist/utils/js-string.js.map +1 -1
- package/package.json +11 -4
- package/web/dist/assets/{index-uXgjjmy3.js → index-SNfxhJjr.js} +89 -85
- package/web/dist/assets/index-vi5C3hqd.css +1 -0
- package/web/dist/index.html +2 -2
- 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
|
[](https://opensource.org/licenses/MIT)
|
|
19
19
|
[](https://www.typescriptlang.org/)
|
|
20
20
|
[]()
|
|
21
|
+
[](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** —
|
|
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** —
|
|
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). **
|
|
164
|
-
+
|
|
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
|
-
- **
|
|
570
|
-
- **AI/Prompt Layer**:
|
|
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
|
+
[](https://cursor.com/en/install-mcp?name=photoshop&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBhbGlzYWl0dGVrZS9waG90b3Nob3AtbWNwIl19)
|
|
625
|
+
[](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":"AAAA;;;GAGG;AAqGH,mGAAmG;AACnG,eAAO,MAAM,4BAA4B,8rDAsCxC,CAAC;AAOF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,wlHA6FlC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnD,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,eAAe,GACf,eAAe,GACf,eAAe,CAAC;AAEpB;;GAEG;AACH,eAAO,MAAM,oBAAoB;IAC/B;;OAEG;;IASH;;OAEG;yBACkB,MAAM,UAAU,MAAM;IAW3C;;OAEG;;IAYH;;OAEG;4BACqB,MAAM,wDAA8C,MAAM;IAiClF;;OAEG;2BACoB,MAAM;IA6C7B;;OAEG;0BACmB,MAAM;IAe5B;;OAEG;sBACe,MAAM;IAYxB;;OAEG;uBACgB,MAAM;IAazB;;OAEG;sBACe,MAAM;IAYxB;;OAEG;;IAUH;;OAEG;sBACe,MAAM;IAkBxB;;OAEG;;IAaH;;;;;;;OAOG;qBACc,MAAM,SAAS,MAAM,QAAQ,MAAM;IAyCpD;;OAEG;yBACkB,MAAM,UAAU,MAAM;IAiB3C;;OAEG;;IAwCH;;OAEG;8BACuB,MAAM;IA6ChC;;OAEG;;IA8DH;;OAEG;+BACwB,MAAM;IAoBjC;;OAEG;wBACiB,MAAM,UAAU,MAAM;IAoB1C;;OAEG;2BACoB,MAAM;IAmB7B;;OAEG;+BACwB,MAAM;IAqBjC;;OAEG;mCAC4B,MAAM;IAqBrC;;OAEG;kCAC2B,OAAO;IAerC;;OAEG;6BACsB,OAAO;IAehC;;OAEG;2BACoB,MAAM;IAgB7B;;;;;;;OAOG;+BACwB,MAAM;IAoBjC;;OAEG;;IAaH;;OAEG;;IAaH;;OAEG;gCACyB,MAAM;IA+BlC;;OAEG;+BACwB,MAAM,UAAU,MAAM,aAAa,MAAM;IAyBpE;;OAEG;4BACqB,MAAM,gBAAgB,MAAM,iBAAiB,OAAO;IA0B5E;;OAEG;6BACsB,MAAM,UAAU,MAAM;IAwB/C;;OAEG;2CACoC,MAAM,YAAY,MAAM;IAoB/D;;;;;;;OAOG;+BACwB,MAAM,cAAc,MAAM,aAAa,MAAM;IA2DxE;;OAEG;;IAmBH;;OAEG;;IAmBH;;OAEG;4BACoB,YAAY;IAmBnC;;OAEG;;IA+CH;;OAEG;;IAmBH;;OAEG;yBACkB,MAAM,OAAO,MAAM,SAAS,MAAM,UAAU,MAAM;IAgBvE;;OAEG;4BACqB,MAAM,aAAa,MAAM;IAwBjD;;OAEG;wBACiB,MAAM;IAuC1B;;OAEG;wBACiB,MAAM,SAAS,MAAM,QAAQ,MAAM;IAqBvD;;OAEG;kCAC2B,MAAM;IAiBpC;;OAEG;iCAC0B,MAAM;IAiBnC;;OAEG;4BACqB,MAAM,OAAO,MAAM,SAAS,MAAM,UAAU,MAAM;IAe1E;;OAEG;;IAaH;;OAEG;;IAaH;;OAEG;;IAaH;;OAEG;;IA0CH;;OAEG;;IA2BH;;OAEG;;IA6BH;;OAEG;oCAEU,qBAAqB,iDAGrB,MAAM;IA0DnB;;OAEG;;IAwBH;;OAEG;;IA4BH;;OAEG;6BACsB,MAAM,iBAAiB,MAAM;IAStD;;OAEG;gCACyB,MAAM;IAIlC;;OAEG;;IAgDH;;OAEG;;IAwCH;;OAEG;;IAwCH;;OAEG;;IAoCH;;OAEG;2CACoC,MAAM,YAAY,MAAM;IAiD/D;;OAEG;;IAuBH;;OAEG;;IA4BH;;OAEG;;IAuCH;;OAEG;;IAuCH;;OAEG;;IAMH;;OAEG;;IA4CH;;;OAGG;;6BAyCsB,MAAM;kCA8CD,MAAM,qBAAqB,OAAO;kCAkDlC,MAAM,UAAU,MAAM;qCAqCnB,MAAM;mCAgCR,MAAM;4BAuCb,MAAM,SAAS,MAAM,UAAU,MAAM;
|
|
1
|
+
{"version":3,"file":"extendscript.d.ts","sourceRoot":"","sources":["../../src/api/extendscript.ts"],"names":[],"mappings":"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"}
|