{"name":"io.github.VicThor-wpp/mograph-mcp","slug":"victhor-wpp-mograph-mcp","title":null,"description":"Drive Adobe Illustrator and After Effects, and move artwork between them as editable shape layers.","url":"https://mcp.market/server/victhor-wpp-mograph-mcp","rating":null,"grade":"C","score":57,"certified":false,"status":"active","category":"productivity","tags":["productivity"],"presence":{"score":3,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://gitlab.com/vic-lab/mograph-mcp","website":"https://gitlab.com/vic-lab/mograph-mcp","version":"0.12.0","remotes":[],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"mograph-mcp","version":"0.12.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Which tool families to expose: ai, ae, symbiosis, dev, or all. A session that only touches one application pays roughly half the tools/list.","default":"all","name":"MOGRAPH_TOOLS"},{"description":"Port of the local WebSocket bridge the After Effects CEP panel connects to. Must match the port the panel was installed with.","default":"9123","name":"MOGRAPH_WS_PORT"},{"description":"Set to 0 to remove ai_run_script and ae_run_script, which evaluate arbitrary ExtendScript inside the applications.","default":"1","name":"MOGRAPH_ALLOW_RAW_SCRIPT"}]}],"tools":[{"name":"ae_add_item","description":"Put a project item -- another COMP, or a footage item -- into a comp as a layer.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_add_layer","description":"Add a layer to a comp: solid, text, null, adjustment, camera or light.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_add_mask","description":"Add a mask to a layer from [x, y] vertices in layer space.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_add_shape","description":"Add a shape layer (rectangle/ellipse/star/custom_path) to a comp.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_aerender","description":"Render a comp headlessly via aerender.exe (does not block the AE UI).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_apply_preset","description":"Apply an .ffx animation preset to a layer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_audit_project","description":"The health of the project: unused items, missing footage, broken expressions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_beat_grid","description":"Lay a tempo on a comp as one marker per beat, and make timing a vocabulary.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_consolidate_footage","description":"Run AE's 'Consolidate All Footage' (merge duplicate footage items).","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_contact_sheet","description":"Render several moments of a comp into one labelled sheet and look at it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_copy_animation","description":"Copy one property's keyframes (easing included) from one layer onto others.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_create_folder","description":"Create a folder in the project panel.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_delete_item","description":"Delete a project item. Refuses if it's still used somewhere unless force=True.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_delete_layer","description":"Delete a layer from a comp, or a whole list of them in one pass.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_duplicate_comp","description":"Duplicate a composition.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_duplicate_layer","description":"Duplicate a layer, optionally renaming the copy.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_effect","description":"Apply an effect to a layer, remove it, list what is on there, set one of its parameters, or copy the whole stack onto other layers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_find_usage","description":"Find every comp/layer where a project item is used. Check this before deleting.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_get_project_info","description":"List items (comps, footage) in the active AE project, and its settings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_get_selection","description":"What the user currently has selected in AE (layers, properties, project items).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_import_file","description":"Import a footage file into the AE project, and into a comp only if you name one.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_import_folder","description":"Import every file in a directory in one round-trip, optionally into its own project folder.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_inspect_layer","description":"Full detail of one layer: transform values, keyframes, expressions, effect parameters, masks.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_interpret_footage","description":"Change how AE interprets a footage item: conform frame rate, loop count, alpha mode.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_keyframe_easing","description":"Shape the keyframes a property already has: easing, interpolation, or both.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_keyframes","description":"Put keyframes on a property, read them, delete them or shift them in time.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_list_available_effects","description":"List every effect installed in AE with its matchName. Use `filter` to search (e.g. 'blur').","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_list_fonts","description":"List the fonts AE can use, by PostScript name. Check here before setting a font on a text layer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_list_layers","description":"List a comp's layers with type, source, timing, parenting, effects and what's animated.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_list_presets","description":"List the .ffx animation presets this install can reach, with full paths.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_markers","description":"Read or add markers, on a comp or on a layer. `op` is `get` or `add`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_move_to_folder","description":"Move project items into a folder.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_new_comp","description":"Create a new composition.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_new_project","description":"Create a new After Effects project.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_open_project","description":"Open an After Effects project (.aep).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_precompose","description":"Precompose the given layers into a new comp.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_preview","description":"Render the work area as a small, slow movie and hand it back as a link.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_reduce_project","description":"Run AE's 'Reduce Project': strip everything the named comps don't need.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_remove_unused_footage","description":"Run AE's 'Remove Unused Footage'.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_render_frames","description":"Render a comp's frames to PNGs and wait until they are really on disk.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_render_queue","description":"Work the render queue: `op` is `add`, `list` or `clear`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_render_status","description":"How a `wait=False` render is going, or all of them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_reorder_layer","description":"Move a layer in the stacking order. Give exactly one of to_index (1 = top), before, after.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_replace_source","description":"Point a layer at a different footage item or comp, keeping its transform, keyframes and effects.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_restack_by_artwork","description":"Put every pushed layer back in the stacking order the Illustrator artwork had.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_run_script","description":"Run arbitrary ExtendScript in After Effects. Code receives (ok, fail, payload).","write_action":true,"price_micros":0,"input_schema":null},{"name":"ae_save_project","description":"Save the active AE project (SaveAs if path given).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_see_frame","description":"Render one frame of a comp and return the image, so the result can be looked at.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_set_comp","description":"Change a comp's settings (rename, size, duration, frame rate, work area).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_set_expression","description":"Set a property's expression (pass an empty string to clear it).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_set_layer","description":"Change a layer's properties. Only the arguments you pass are modified.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_set_text","description":"Edit an existing text layer. Only the arguments you pass are changed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_set_track_matte","description":"Set a layer's track matte: alpha, alpha_inverted, luma, luma_inverted, or none to remove it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_split_layer","description":"Split a layer in two at the given time.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ae_status","description":"Report After Effects install + bridge connection status, and the workspace.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_add","description":"Draw a primitive: `kind` is `rect`, `ellipse`, `path` or `text`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_add_layer","description":"Add a new layer to the active Illustrator document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_artboard_items","description":"List the items that belong to one artboard, with their ids.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_audit_assets","description":"What the document carries in its panels -- swatches, symbols, styles, images.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_audit_for_animation","description":"Find what will break or degrade when this artwork is pushed to After Effects.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_audit_structure","description":"Audit one frame's STRUCTURE with motion eyes: where does the hierarchy lie?","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_close_document","description":"Close the active Illustrator document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_cluster_items","description":"Propose how to group loose items. Read-only: nothing is modified.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_contact_sheet","description":"Render every artboard small and tile them into one numbered sheet.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_convert_color_space","description":"Convert the document color space. 'rgb' is what After Effects works in.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_delete","description":"Delete things: `what` is `items`, `empty_layers`, `off_artboard` or `layer`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ai_deselect","description":"Clear the Illustrator selection.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_diff_frames","description":"What changed between two frames of a storyboard -- which is the animation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_export","description":"Export the active Illustrator document to PNG/SVG/PDF/JPG.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_export_artboards","description":"Export every artboard to its own file; the directory is created.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_find_items","description":"Find items by any combination of criteria (AND). Returns their stable ids.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_frame_tree","description":"Everything on one artboard WITH its hierarchy, in artboard-local coordinates.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_get_selection","description":"Describe the current Illustrator selection (typename + name).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_inspect_document","description":"Overview of the open document: artboards, color space, item counts by type, fonts, linked images.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_inspect_item","description":"One item in full detail: bounds, fill, stroke, text, children.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_layers_from_artboards","description":"Give each artboard its own layer and move its artwork into it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_list_artboards","description":"List artboards with size and position -- what each After Effects comp needs to match.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_list_items","description":"List page items, filterable by layer and typename (PathItem, GroupItem, TextFrame, PlacedItem...).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_list_layers","description":"List layers in the active Illustrator document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_list_layers_tree","description":"The full layer tree including sublayers, with per-layer item counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_move_to_layer","description":"Move items into a layer, creating it if it doesn't exist.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_new_document","description":"Create a new Illustrator document.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ai_open_document","description":"Open an existing Illustrator file (.ai / .pdf / .psd / .svg).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_optimize","description":"Get a delivered file into a state you can actually produce from, in one call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_prepare","description":"Run the preparation passes a delivered file needs, in the right order.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ai_propagate_names","description":"Carry the names of ONE named frame to its neighbours, matching by geometry.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_release_to_layers","description":"Put each top-level item of a layer onto its own layer.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ai_rename_items","description":"Rename many items at once: [{\"item\": \"2/0/5\", \"name\": \"cabeza\"}, ...].","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_run_script","description":"Run arbitrary ExtendScript in Illustrator. The code receives (ok, fail, payload) and must call ok(data)/fail(msg).","write_action":true,"price_micros":0,"input_schema":null},{"name":"ai_save_document","description":"Save the active Illustrator document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_see_document","description":"Render the document and return the image itself, so the artwork can be looked at.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_select","description":"Select items by artboard, layer, type, name or explicit list. Filters combine with AND.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_select_layer","description":"Activate a layer by name in Illustrator.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_set_item","description":"Rename an item or change its visibility, lock, opacity or blend mode.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_set_layer","description":"Rename a layer or change its visibility, lock or opacity.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_set_style","description":"Paint the current selection: fill, stroke, or both in one call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_status","description":"Report Illustrator connection status, version, document count and workspace.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_track_frames","description":"Follow every element across a run of frames: the motion plan as one object.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ai_ungroup","description":"Ungroup the selection one level.","write_action":false,"price_micros":0,"input_schema":null},{"name":"main","description":"","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":57,"grade":"C","scanned_at":"2026-09-20T11:40:52.069Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T11:40:52.044Z","components":{"code":{"score":20,"max":25,"notes":["50 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: unknown"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"mograph_mcp-0.12.0/src/mograph/ae_bridge.py: …he panel wait raising the same message `eval()` would instead of letting the …"}],"inputs":{"packages":[{"registryType":"pypi","identifier":"mograph-mcp","version":"0.12.0","found":true,"license":"Apache-2.0","dependencyCount":7,"publishedAt":"2026-09-04T15:06:40.064419Z","repositoryUrl":"https://gitlab.com/vic-lab/mograph-mcp"}],"repo":{"found":false},"icon":{"url":null,"source":"none"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":null,"score":3}}}},"grade_history":[],"reviews":[]}