io.github.editmamei/editmamei
NPM · EDITMAMEI · SCANNED SEP 20
Photoshop MCP server: natural-language AI photo editing in desktop Photoshop. AI orchestration.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 39 of 115 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency87
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to editmamei/editmamei). View diagnostics → Pass
- License check failed: the license (FSL-1.1-MIT) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 1 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability59
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 28680 tokens (~462/item across 62 items; 62 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management88
- Stability check failed: the tool surface changed between 1.1.0 and 1.5.0: 8 tool removals, 0 breaking changes, 3 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 62 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the io.github.editmamei/editmamei MCP server?
io.github.editmamei/editmamei runs locally as an npm package, launched with npx -y editmamei. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · editmamei
claude mcp add editmamei-editmamei -- npx -y editmamei
{
"mcpServers": {
"editmamei-editmamei": {
"command": "npx",
"args": [
"-y",
"editmamei"
]
}
}
} {
"servers": {
"editmamei-editmamei": {
"command": "npx",
"args": [
"-y",
"editmamei"
]
}
}
} codex mcp add editmamei-editmamei -- npx -y editmamei
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"editmamei-editmamei": {
"type": "local",
"command": [
"npx",
"-y",
"editmamei"
],
"enabled": true
}
}
} openclaw mcp add editmamei-editmamei --command npx --arg -y --arg editmamei
mcp_servers:
editmamei-editmamei:
command: "npx"
args: ["-y", "editmamei"] {
"McpServers": {
"editmamei-editmamei": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"editmamei"
]
}
}
} assistant mcp add editmamei-editmamei -t stdio -c npx -a -y editmamei
{
"mcpServers": {
"editmamei-editmamei": {
"command": "npx",
"args": [
"-y",
"editmamei"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 85 to 88.
- 19 Sept 26 +26
- Malware scan: unverified → pass ▲ security
- Judged manipulation: unverified → pass ▲ security
- Schema quality: unverified → excellent ▲ functional
- 18 Sept 26 −25
- Judged manipulation: pass → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Schema quality: excellent → unverified ▼ functional
- Package version: 1.4.0 → 1.5.0 functional
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 71 to 75.
- 14 Sept 26 −3
No change was recorded against any check on this day. Stability & Change Management went from 88 to 68.
- 13 Sept 26 +1
- CVE-2026-76845 no longer affects this package ▲ security
- Known CVEs: partial → pass ▲ security
- 10 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 79 to 83.
- 9 Sept 26 0
- CVE-2026-76845 affects this package ▼ security
- Known CVEs: pass → partial ▼ security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/editmamei@1.5.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | editmamei/editmamei |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/editmamei/editmamei/.github/workflows/release.yml@refs/heads/main |
| Rekor log index | 2886636615 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:00d87a3ffac9c868ae28d039ae0bfca545b44242cf73cf40367141ccdcfebf0060d03eda3d5673c2e334fa4d50bf3a5f166f82a580e8b2708557b7e11 |
Background: How many MCP packages publish verified provenance →
Dependencies 115 packages
| Packages resolved | 115 |
|---|---|
| Stale | 39 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ps_shape ~787
Draw a vector SHAPE layer — `rectangle` (optionally rounded via corner_radius), `ellipse`, or `line` — filled with a solid color, optionally stroked. Hoisted out of the active layer's group by default even though the underlying Mk-contentLayer descriptor carries no placement target and would otherwise nest the new layer INSIDE that group (pass into_active_group:true to keep that native nesting). Aim it EITHER by anchor-relational `placement` (preferred: name anchors + a relation and the resolver computes the geometry, verified by an objective gate — no pixel-guessing; rectangle/ellipse ← a region relation, line ← a path relation) OR by ABSOLUTE document pixels (top-left origin: rectangle/ellipse take left/top/right/bottom; line takes start_x/start_y → end_x/end_y plus weight — you must know the pixel positions, so prefer the anchor-relational `placement` path above and verify the result with a preview). Creates a new vector layer (non-destructive — delete it to remove). (AM-only; verified live on PS 27.2.0.)
| Name | Type | Req | Description |
|---|---|---|---|
| bottom | number | – | rectangle/ellipse: bounding-box bottom edge, document px. |
| corner_radius | number | – | rectangle only: corner radius in px. 0 (default) = sharp corners; >0 = rounded. |
| end_x | number | – | line: end point X, document px. |
| end_y | number | – | line: end point Y, document px. |
| fill_color | object | – | Fill color (the line color for type=line). RGB 0-255. Default black. |
| into_active_group | boolean | – | Photoshop's Mk-contentLayer descriptor carries no placement target, so with a GROUP active it would natively nest the new shape layer INSIDE that group. Default false hoists the new layer back out so… |
| left | number | – | rectangle/ellipse: bounding-box left edge, document px. |
| placement | object | – | ANCHOR-RELATIONAL placement (preferred over guessing pixels): rectangle/ellipse ← a region relation (inside/gap) → the resolved region bounding box; line ← a path relation (along/offset-curve over a… |
| right | number | – | rectangle/ellipse: bounding-box right edge, document px. |
| start_x | number | – | line: start point X, document px. |
| start_y | number | – | line: start point Y, document px. |
| stroke_color | object | – | rectangle/ellipse stroke color when stroke_width>0. RGB 0-255. Default black. |
| stroke_width | number | – | rectangle/ellipse: outline width in px. 0 (default) = no stroke (fill only). Ignored for line (use weight). |
| top | number | – | rectangle/ellipse: bounding-box top edge, document px. |
| type | string | yes | rectangle: a box (left/top/right/bottom; corner_radius>0 rounds the corners). ellipse: an oval in the left/top/right/bottom bounding box. line: a straight line from (start_x,start_y) to (end_x,end_y)… |
| weight | number | – | line only: line thickness in px. Default 4. |
| Name | Type | Req | Description |
|---|---|---|---|
| context | object | – | – |
| hoisted | boolean | – | True when the new layer had to be moved back out of the previously-active group to honor into_active_group:false (the default). False when it landed correctly on its own, or when the move-back itself… |
| layer_name | string | – | – |
| parent_path | array|null | – | The containing-group name chain (outermost first), empty array at the document root. |
| placement | object | – | Present when anchor-relational placement was used: the resolved geometry + gate verdict. |
| shape_created | boolean | – | – |
| shape_type | string | – | – |
| stroked | boolean | – | – |
No examples provided.
ps_text ~412
Text layer — create it or style it, chosen with `op`. create: a new text layer with `text` at `x`/`y` and `font_size`. set_content/set_font/set_color/set_alignment act on the currently active text layer (throws if it isn't one). Font names accept either the PostScript name ("ArialMT") or family name ("Arial", resolved to its Regular/first variant); throws clearly if no installed font matches. The set_* ops are idempotent.
| Name | Type | Req | Description |
|---|---|---|---|
| alignment | string | – | Text alignment. |
| blue | integer | – | Blue component (0-255). |
| font_name | string | – | Font family name (e.g., "Arial", "Helvetica"). |
| font_size | number | – | Font size in points, up to 1296 — Photoshop's own ceiling for the Character panel. create: initial size (default 24). set_font: new size (optional — omit to leave the current size unchanged). |
| green | integer | – | Green component (0-255). |
| op | string | yes | create: new text layer with `text` at `x`/`y` (default 100,100) and `font_size` (default 24). set_content: replace the active text layer's content with `text`. set_font: set the active text layer's f… |
| red | integer | – | Red component (0-255). |
| text | string | – | create: initial text content. set_content: new text content, replacing the existing text. |
| x | integer | – | X position in pixels (default 100). Bounded at ±300,000 px. |
| y | integer | – | Y position in pixels (default 100). Bounded at ±300,000 px. |
| Name | Type | Req | Description |
|---|---|---|---|
| alignment | string | – | op=set_alignment: the alignment applied. |
| color | string | – | op=set_color: the RGB() string applied. |
| context | object | – | – |
| created | boolean | – | op=create: true on success. |
| font | string | – | op=set_font: the font actually matched. |
| fontSize | number | – | op=create: the size applied. |
| layerName | string | – | op=create: the new layer name. |
| matched_by | string | – | op=set_font: how `font_name` was resolved. |
| position | object | – | op=create: {x, y}. |
| requested | string | – | op=set_font: the font requested. |
| size | number | – | op=set_font: the size applied, if given. |
| text | string | – | op=create/set_content: the text content. |
No examples provided.
ps_transform_canvas ~177
Transform the whole document (canvas + all layers), not a single layer — choose with `op`. `rotate` spins the canvas by degrees (+cw; pass 90/180/-90 for quarter/half turns). `flip` mirrors the canvas horizontal|vertical. For rotating/flipping ONE layer use ps_transform_layer instead.
| Name | Type | Req | Description |
|---|---|---|---|
| degrees | number | – | Rotation angle in degrees, positive = clockwise. Any value (incl. 90 / 180 / -90 for quarter/half turns). |
| op | string | yes | Which document-level transform to apply. rotate: spin the whole canvas by degrees (+cw; 90/180/-90 for quarter/half turns). flip: mirror the whole canvas horizontal|vertical. |
| orientation | string | – | 'horizontal' mirrors the canvas left-right; 'vertical' mirrors top-bottom. |
| Name | Type | Req | Description |
|---|---|---|---|
| axis | string | – | – |
| degrees | number | – | – |
| flipped_canvas | boolean | – | – |
| rotated_canvas | boolean | – | – |
No examples provided.
ps_transform_layer ~1,106
Transform the active layer — choose the operation with `op`. `fit` scales to fit (letterbox) or fill (crop) the canvas and centers (idempotent). `scale` does uniform (scale_percent) or non-uniform stretch/squash (scale_x_percent/scale_y_percent) — multiplicative, not idempotent. `move` translates via exactly one of delta (relative), absolute (top-left target), center_on (center target — best for "place inside the frame opening"), or an anchor-relational `placement` (preferred: a point relation → the layer center moves to the resolved, gate-verified point); mixing the raw modes errors. `rotate` rotates by relative degrees around center. `flip` mirrors horizontal/vertical. `skew` slants the layer (skew_h_degrees/skew_v_degrees). `free` is a numeric free-transform (scale + degrees + offset). scale/move/rotate/flip/skew/free auto-promote the background layer (background_promoted=true).
| Name | Type | Req | Description |
|---|---|---|---|
| absolute_x | number | – | ABSOLUTE mode: target X for the layer's bounds top-left corner, in document pixels. Pair with absolute_y. Use when you know exactly where the top-left should land. Mutually exclusive with delta_* / c… |
| absolute_y | number | – | ABSOLUTE mode: target Y for the layer's bounds top-left corner, in document pixels. Pair with absolute_x. |
| axis | string | – | 'horizontal' mirrors left-right; 'vertical' mirrors top-bottom. |
| center_anchor | boolean | – | Scale from center (true) or top-left (false). Default: true. |
| center_on_x | number | – | CENTER mode: target X for the layer's bounds CENTER point, in document pixels. Pair with center_on_y. Use when placing a layer inside a known region (e.g. a frame opening). Mutually exclusive with de… |
| center_on_y | number | – | CENTER mode: target Y for the layer's bounds CENTER point, in document pixels. Pair with center_on_x. |
| degrees | number | – | Rotation angle in degrees (positive = clockwise, negative = counter-clockwise). |
| delta_x | number | – | RELATIVE mode: horizontal pixel offset from the layer's current position. Pair with delta_y. Mutually exclusive with absolute_*/center_on_*. |
| delta_y | number | – | RELATIVE mode: vertical pixel offset from the layer's current position. Pair with delta_x. |
| mode | string | – | `fit` (default) scales the layer to fit inside the canvas while preserving aspect — letterboxes on the short edge. `fill` covers the entire canvas — crops on the long edge. Both preserve aspect ratio… |
| offset_x | number | – | op=skew/free: horizontal translation in pixels (default 0). |
| offset_y | number | – | op=skew/free: vertical translation in pixels (default 0). |
| op | string | yes | Which transform to apply to the active layer. fit: scale to fit/fill the canvas + center (mode fit|fill). scale: uniform scale_percent OR non-uniform scale_x_percent/scale_y_percent (center_anchor).… |
| placement | object | – | ANCHOR-RELATIONAL move (preferred over guessing a pixel): a POINT relation (centroid/midpoint/offset) → the layer's CENTER is moved to the resolved, gate-verified point (e.g. "center this layer on th… |
| scale_percent | number | – | Uniform scale percentage (e.g. 50 = 50%, 200 = 200%). Use for proportional scaling. |
| scale_x_percent | number | – | Non-uniform: horizontal scale percentage. Pair with scale_y_percent to stretch/squash (the #1 pixel-stretch effect). If only one axis is given the other defaults to 100%. |
| scale_y_percent | number | – | Non-uniform: vertical scale percentage. Pair with scale_x_percent. |
| skew_h_degrees | number | – | op=skew: horizontal skew (slant) angle in degrees — positive slants the top edge right. At least one of skew_h_degrees / skew_v_degrees is required for op=skew. |
| skew_v_degrees | number | – | op=skew: vertical skew (slant) angle in degrees — positive slants the left edge down. |
| Name | Type | Req | Description |
|---|---|---|---|
| applied_delta_x | number | – | – |
| applied_delta_y | number | – | – |
| axis | string | – | – |
| background_promoted | boolean | – | – |
| context | object | – | – |
| degrees | number | – | – |
| fitted | boolean | – | – |
| flipped | boolean | – | – |
| mode | string | – | – |
| moved | boolean | – | – |
| newSize | object | – | – |
| new_bounds | object | – | – |
| originalSize | object | – | – |
| percent | number | – | – |
| placement | object | – | Present when op=move used anchor-relational placement: the resolved point + gate verdict. |
| rotate_degrees | number | – | – |
| rotated | boolean | – | – |
| scaleFactor | number | – | – |
| scalePercent | number | – | – |
| scale_x_percent | number | – | – |
| scale_y_percent | number | – | – |
| scaled | boolean | – | – |
| skew_h_degrees | number | – | – |
| skew_v_degrees | number | – | – |
| transformed | boolean | – | – |
No examples provided.
ps_undo ~155
Step backward in the document history (equivalent to Ctrl/Cmd+Z). WHEN TO REACH FOR THIS: after an experimental destructive bake (ps_merge mode=visible/flatten, ps_filter op=apply type=*_blur/sharpen/noise) produced a wrong result; after a play_action whose scope you mispredicted; or to revert an entire branch of exploration. Non-destructive workflows (adjustment layers + masks) rarely need this — just tweak/delete the offending layer instead. Reversible via ps_redo as long as no new edit has been made since. Returns current history state, remaining steps, and document context.
| Name | Type | Req | Description |
|---|---|---|---|
| steps | integer | – | Number of steps to undo (default: 1) |
| Name | Type | Req | Description |
|---|---|---|---|
| availableRedoSteps | number | – | – |
| context | object | – | – |
| currentHistoryState | string | – | – |
| redone | boolean | – | – |
| remainingStates | number | – | – |
| steps | number | – | – |
| undone | boolean | – | – |
No examples provided.
ps_vector_mask ~376
Attach, remove, (un)link, or (dis/en)able a layer VECTOR MASK — the path-driven, resolution-independent companion to a pixel layer mask. Ops: `add` (from the active path via source=from_current_path — the typical flow after ps_path op=create_from_selection / save — or an empty source=reveal_all/hide_all mask), `delete`, `link`, `unlink`, `disable` (turn the mask off without deleting it), `enable` (turn it back on). **Reach for this when** you want a crisp vector-edged mask rather than a painted pixel mask. `add` needs a non-background layer (and a path for from_current_path); the other ops need a layer that already has a vector mask. (Vector masks are AM-driven; verified live on PS 27.2.0.)
| Name | Type | Req | Description |
|---|---|---|---|
| op | string | yes | add: create a vector mask on the active layer — seeded from the active path (source=from_current_path, needs a path from ps_path) or as an empty reveal_all/hide_all mask (no path needed). delete: rem… |
| source | string | – | add only: what the vector mask is seeded from. 'from_current_path' = the active work/saved path (needs a path; the main consumer of ps_path). 'reveal_all' = an empty mask that reveals the whole layer… |
| Name | Type | Req | Description |
|---|---|---|---|
| context | object | – | – |
| layer_name | string | – | – |
| source | string | – | – |
| vector_mask_added | boolean | – | – |
| vector_mask_deleted | boolean | – | – |
| vector_mask_enabled | boolean | – | – |
| vector_mask_linked | boolean | – | – |
No examples provided.
What is the io.github.editmamei/editmamei MCP server?
io.github.editmamei/editmamei is an MCP server listed in the public MCP registry as io.github.editmamei/editmamei. Photoshop MCP server: natural-language AI photo editing in desktop Photoshop. AI orchestration. This page covers its npm package (editmamei).
Is the io.github.editmamei/editmamei MCP server safe to use?
io.github.editmamei/editmamei scores 88 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.editmamei/editmamei MCP server expose?
io.github.editmamei/editmamei exposes 62 tools: ps_ping, ps_list_capabilities, ps_create_document, ps_document, ps_close_document, and 57 more. Their descriptions and schemas cost roughly 28,680 tokens of context every time the server is loaded.
Is the io.github.editmamei/editmamei MCP server still maintained?
io.github.editmamei/editmamei is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.editmamei/editmamei MCP server under?
io.github.editmamei/editmamei declares the FSL-1.1-MIT licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.