Add credits and license to blueprint-MCP
This commit is contained in:
21
Plugins/BlueprintMCP/LICENSE.txt
Normal file
21
Plugins/BlueprintMCP/LICENSE.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 BlueprintMCP Contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
72
Plugins/BlueprintMCP/README.md
Normal file
72
Plugins/BlueprintMCP/README.md
Normal file
@@ -0,0 +1,72 @@
|
||||
= History
|
||||
|
||||
This plugin was originally vibe-coded by Claude Code. It
|
||||
was then posted to David Gundry's github account, here:
|
||||
|
||||
https://github.com/mirno-ehf/ue5-mcp
|
||||
|
||||
He released it under the MIT license.
|
||||
|
||||
How do I know it was vibe coded? Because he says so:
|
||||
|
||||
> For Humans:
|
||||
>
|
||||
> You're welcome here, but probably not in the way you'd
|
||||
> expect. This project is built and maintained entirely by
|
||||
> AI coding agents — Claude Code, Cursor, Copilot Workspace,
|
||||
> and the like. We don't accept human-written code or
|
||||
> human-opened issues.
|
||||
|
||||
Huh, interesting. I (Josh Yelon) downloaded the code, and
|
||||
evaluated it. I was curious what vibe coding could do.
|
||||
Here's what I found:
|
||||
|
||||
* The code, overall, had issues, but in the end, it wasn't
|
||||
that bad. It did work, mostly - and that matters. I wanted
|
||||
my own working MCP server, and starting from a place where
|
||||
you have working code is a lot easier than starting from
|
||||
a blank slate.
|
||||
|
||||
* Claude really doesn't build any mechanisms to enforce
|
||||
consistency. For example: there were all the handlers, and
|
||||
then in a different file, declarations of all the handlers,
|
||||
then in another file registrations of all the handlers with
|
||||
the webserver, then in another place a list of all the
|
||||
handlers that require undo support, then in an entirely
|
||||
other directory, a list of all the handlers and their
|
||||
parameters. If any of these lists got out of sync, it would
|
||||
break.
|
||||
|
||||
* Claude doesn't seem to care at all about extra layers upon
|
||||
layers, or about dependencies. Rather than building an MCP
|
||||
server in an unreal plugin, it built a *web* server in an
|
||||
unreal plugin, then built an MCP-to-web translation program
|
||||
in *javascript*. Requests to the server were getting
|
||||
translated from json into URL parameters and then back into
|
||||
json. Ouch. The javascript required installation of about
|
||||
a thousand javascript libraries, some of which were not easy
|
||||
to install. Why not just build an MCP server in the Unreal
|
||||
plugin directly, skipping all the dependencies and
|
||||
translation layers?
|
||||
|
||||
* Claude will repeat code over and over. I found endless
|
||||
places where there were 10 copies of the same function, with
|
||||
trivial variations, that could have all been merged into one
|
||||
function with a parameter or two. When it does repeat code,
|
||||
the repetitions are not generally consistent with each other:
|
||||
one variant might have a bug, whereas another is fine.
|
||||
|
||||
* There were lots of little edge-case bugs throughout the
|
||||
code. Claude is actually not bad about noticing edge cases,
|
||||
but it misses some.
|
||||
|
||||
Despite all this, it was much easier to start from something
|
||||
than to start from nothing.
|
||||
|
||||
So, I undertook a massive refactoring effort. I did use
|
||||
Claude Code extensively - in fact, I'd say Claude did 70% of
|
||||
the work. But I monitored every step, and constantly pushed
|
||||
Claude hard to use better software engineering practices.
|
||||
|
||||
The result, I think, is a pretty clean MCP server.
|
||||
|
||||
@@ -1,206 +0,0 @@
|
||||
# BlueprintMCP Endpoint Naming Plan
|
||||
|
||||
Convention: every endpoint is `verb_noun`. Names should be descriptive enough that you can guess what the endpoint does without reading documentation. Verbs:
|
||||
- **dump** — return the entire contents of a single object (blueprint, graph, material, etc.)
|
||||
- **list** — enumerate assets or sub-elements from the asset registry (cheap, no loading)
|
||||
- **search** — deep search that loads assets, inspects their contents, and returns matches
|
||||
- **find** — look up references or locate specific items by criteria
|
||||
- **create** — make a new asset/graph/struct/enum
|
||||
- **add** — add a sub-element to an existing thing (variable, component, parameter, etc.)
|
||||
- **remove/delete** — remove a sub-element or asset
|
||||
- **set/change** — change a property value or type
|
||||
- **rename** — rename something
|
||||
- **connect/disconnect** — wire/unwire pins
|
||||
- **validate/compile** — compile and report errors
|
||||
- **snapshot/diff/restore** — capture, compare, and restore graph state
|
||||
|
||||
## Blueprint — Read/Query
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `list` | `list_blueprint_assets` | List all blueprint and level blueprint assets from the asset registry (no loading). Optional `query` filters by name/path substring. Optional `parentClass` filters by parent class name. Returns name, path, and parent class for each. |
|
||||
| `blueprint` | `dump_blueprint` | Load one blueprint by name and dump everything: variables, graph list, interfaces, and parent class. |
|
||||
| `graph` | `dump_blueprint_graph` | Load one graph by blueprint name + graph name. Dumps all nodes with their pins, connections, positions, and metadata. |
|
||||
| `search` | `search_within_blueprints` | Deep search: loads every blueprint, iterates all graphs/nodes, and finds nodes whose title, function name, event name, or variable name matches the query. Returns blueprint, graph, and node info for each match. |
|
||||
| `references` | `find_asset_references` | Given an asset path, queries the asset registry for all packages that reference it. Separates results into blueprint referencers and other referencers. |
|
||||
| `search_by_type` | `search_type_usage_in_blueprints` | Deep search: loads every blueprint and finds variables, function parameters, and pin types that use a given type name (struct, class, or enum). Returns usage location and context for each match. |
|
||||
| `get_pin_info` | `get_pin_details` | Get detailed type and connection info for a specific pin (by blueprint, nodeId, pinName). |
|
||||
| `check_pin_compatibility` | `check_pin_connection_compatibility` | Check whether two specific pins (source and target) can be connected. Returns compatibility and any error message. |
|
||||
| `test_save` | `test_save_blueprint_package` | Diagnostic: load a blueprint and save its package with no modifications, to verify the save pipeline works. |
|
||||
|
||||
## Blueprint — Discovery (Unreal reflection)
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `list_classes` | `search_unreal_classes` | Search all UClasses in the engine. Optional `query` filters by class name substring. Optional `parentClass` restricts to subclasses. Returns class name, path, parent, and flags. |
|
||||
| `list_functions` | `list_class_functions` | List all UFunctions on a given class. Optional `query` filters by function name substring. Returns name, parameters, return type, and flags for each. |
|
||||
| `list_properties` | `list_class_properties` | List all UProperties on a given class. Optional `query` filters by property name substring. Returns name, type, flags, and metadata for each. |
|
||||
|
||||
## Blueprint — Validation
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `validate_blueprint` | `compile_blueprint` | Compile one blueprint and report any errors/warnings with graph, node, and message details. |
|
||||
| `validate_all_blueprints` | `compile_all_blueprints` | Compile all blueprints (optional `query` to filter which ones). Returns per-blueprint pass/fail with error details. Supports pagination. |
|
||||
|
||||
## Blueprint — Creation/Structure
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `create_blueprint` | `create_blueprint_asset` | Create a new Blueprint asset with a given name, path, and parent class. |
|
||||
| `create_graph` | `create_blueprint_graph` | Create a new function or macro graph inside a blueprint. |
|
||||
| `delete_graph` | `delete_blueprint_graph` | Delete a graph from a blueprint. |
|
||||
| `rename_graph` | `rename_blueprint_graph` | Rename a graph inside a blueprint. |
|
||||
| `reparent_blueprint` | `reparent_blueprint` | Change a blueprint's parent class. |
|
||||
| `create_struct` | `create_struct_asset` | Create a new user-defined struct asset. |
|
||||
| `create_enum` | `create_enum_asset` | Create a new user-defined enum asset. |
|
||||
| `add_struct_property` | `add_struct_field` | Add a field to a user-defined struct. |
|
||||
| `remove_struct_property` | `remove_struct_field` | Remove a field from a user-defined struct. |
|
||||
|
||||
## Blueprint — Variables
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `add_variable` | `add_blueprint_variable` | Add a variable to a blueprint with a given name and type. |
|
||||
| `remove_variable` | `remove_blueprint_variable` | Remove a variable from a blueprint by name. |
|
||||
| `change_variable_type` | `change_blueprint_variable_type` | Change an existing blueprint variable's type. |
|
||||
| `set_variable_metadata` | `set_blueprint_variable_metadata` | Set variable metadata (category, tooltip, replication, etc.). |
|
||||
|
||||
## Blueprint — Functions/Parameters
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `add_function_parameter` | `add_function_parameter` | Add an input or output parameter to a function graph. |
|
||||
| `remove_function_parameter` | `remove_function_parameter` | Remove a parameter from a function graph. |
|
||||
| `change_function_param_type` | `change_function_parameter_type` | Change the type of an existing function parameter. |
|
||||
|
||||
## Blueprint — Event Dispatchers
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `add_event_dispatcher` | `add_event_dispatcher` | Add an event dispatcher to a blueprint. |
|
||||
| `list_event_dispatchers` | `list_event_dispatchers` | List all event dispatchers on a blueprint with their delegate signatures. |
|
||||
|
||||
## Blueprint — Components
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `add_component` | `add_blueprint_component` | Add a component to a blueprint's component hierarchy. |
|
||||
| `remove_component` | `remove_blueprint_component` | Remove a component from a blueprint. |
|
||||
| `list_components` | `list_blueprint_components` | List all components in a blueprint's component hierarchy. |
|
||||
|
||||
## Blueprint — Interfaces (new-style)
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `list_interfaces` | `list_blueprint_interfaces` | List all interfaces implemented by a blueprint, with the function stubs each provides. |
|
||||
| `add_interface` | `add_blueprint_interface` | Add an interface implementation to a blueprint. Creates function stub graphs. |
|
||||
| `remove_interface` | `remove_blueprint_interface` | Remove an interface implementation from a blueprint. Optionally preserves function graphs. |
|
||||
|
||||
## Blueprint — Node Mutation (new-style)
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `search_node_types` | `search_spawnable_node_types` | Search the blueprint action database (the right-click menu) for spawnable node types matching a query string. Returns full action names like "Utilities\|Flow Control\|Branch". |
|
||||
| `spawn_node` | `spawn_node_in_graph` | Create one or more nodes in a graph by exact action name (from search_spawnable_node_types). Invokes the spawner and returns the new node details. |
|
||||
| `delete_node` | `delete_node_from_graph` | Delete a node from a graph by GUID. |
|
||||
| `move_node` | `set_node_position` | Set a node's X/Y position in the graph editor. |
|
||||
| `duplicate_nodes` | `duplicate_nodes_in_graph` | Duplicate one or more nodes within a graph. |
|
||||
| `connect_pins` | `connect_blueprint_pins` | Connect two pins (by blueprint, source node+pin, target node+pin). |
|
||||
| `disconnect_pin` | `disconnect_blueprint_pin` | Break connections on a pin (all connections, or a specific one). |
|
||||
| `set_pin_default` | `set_pin_default_value` | Set a pin's default value string. |
|
||||
| `get_node_comment` | `get_node_comment` | Get the comment text on a node. |
|
||||
| `set_node_comment` | `set_node_comment` | Set or clear the comment text on a node. |
|
||||
| `replace_function_calls` | `replace_function_calls_in_blueprint` | Bulk-replace all calls to one function with calls to another across a blueprint. |
|
||||
| `refresh_all_nodes` | `refresh_all_nodes_in_graph` | Refresh (reconstruct) all nodes in a graph to pick up signature changes. |
|
||||
| `change_struct_node_type` | `change_struct_node_type` | Change which struct a Break/Make/Set-Members node operates on. |
|
||||
| `set_blueprint_default` | `set_class_default_value` | Set a property value on the blueprint's Class Default Object (CDO). |
|
||||
| `rename_asset` | `rename_asset` | Rename or move an asset to a new name/path. |
|
||||
| `delete_asset` | `delete_asset` | Delete an asset from the project. |
|
||||
| `diff_blueprints` | `diff_two_blueprints` | Compare two blueprints and return structural differences (added/removed/changed nodes, connections, variables). |
|
||||
|
||||
## Blueprint — Snapshots
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `snapshot_graph` | `snapshot_blueprint_graph` | Capture a snapshot of a blueprint's graphs (nodes and connections) for later diffing or restore. |
|
||||
| `diff_graph` | `diff_blueprint_graph_vs_snapshot` | Diff the current state of a blueprint's graphs against a previously captured snapshot. Returns added/removed/changed nodes and connections. |
|
||||
| `restore_graph` | `restore_blueprint_graph_from_snapshot` | Restore a blueprint's graphs to the state captured in a snapshot (recreates nodes and connections). |
|
||||
| `find_disconnected_pins` | `find_pins_disconnected_since_snapshot` | Compare current graphs against a snapshot and find pins that were previously connected but are now disconnected. |
|
||||
| `analyze_rebuild_impact` | `analyze_cpp_rebuild_impact` | Given a C++ module name, find all blueprints that use structs/classes from that module and report which nodes/pins would be affected by a rebuild. |
|
||||
|
||||
## Materials — Read
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `materials` | `list_material_assets` | List all material and material instance assets from the asset registry (no loading). Optional `query` filters by name/path substring. Optional `type` filters to "material" or "instance" only. |
|
||||
| `material` | `dump_material` | Load one material by name and dump everything: properties (domain, blend mode, shading model, two-sided, etc.) and expression summary. |
|
||||
| `material_graph` | `dump_material_expression_graph` | Load one material and dump its full expression graph: every expression node with type, position, parameter values, and all pin connections. |
|
||||
| `describe_material` | `describe_material_in_english` | Load a material and generate a human-readable text description by tracing the expression graph backwards from each material output pin. |
|
||||
| `search_materials` | `search_within_materials` | Deep search: loads every material, inspects expression nodes, and finds materials/expressions whose name, class, description, or parameter name matches the query. |
|
||||
| `material_references` | `find_material_references` | Given a material name, query the asset registry for all assets that reference it. |
|
||||
|
||||
## Materials — Mutation
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `create_material` | `create_material_asset` | Create a new material asset. |
|
||||
| `set_material_property` | `set_material_property` | Set a top-level material property (blend mode, shading model, two-sided, etc.). |
|
||||
| `add_material_expression` | `add_material_expression` | Add a material expression node to a material's graph. |
|
||||
| `delete_material_expression` | `delete_material_expression` | Remove a material expression node from a material's graph. |
|
||||
| `connect_material_pins` | `connect_material_expression_pins` | Connect two expression pins in a material graph. |
|
||||
| `disconnect_material_pin` | `disconnect_material_expression_pin` | Disconnect a pin in a material graph. |
|
||||
| `set_expression_value` | `set_material_expression_property` | Set a property on a material expression node (e.g. constant value, texture, parameter name). |
|
||||
| `move_material_expression` | `set_material_expression_position` | Set X/Y position of a material expression in the graph editor. |
|
||||
| `validate_material` | `compile_material` | Compile a material and report errors. |
|
||||
|
||||
## Material Instances
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `create_material_instance` | `create_material_instance_asset` | Create a new material instance constant with a given parent material. |
|
||||
| `set_material_instance_parameter` | `set_material_instance_parameter` | Set a parameter override on a material instance (scalar, vector, texture, etc.). |
|
||||
| `material_instance_params` | `dump_material_instance_parameters` | Dump all parameter values on a material instance, showing both overridden and inherited values. |
|
||||
| `reparent_material_instance` | `reparent_material_instance` | Change a material instance's parent material. |
|
||||
|
||||
## Material Functions
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `material_functions` | `list_material_function_assets` | List all material function assets from the asset registry. Optional `query` filters by name/path substring. |
|
||||
| `material_function` | `dump_material_function` | Load one material function and dump its expressions, inputs, and outputs. |
|
||||
| `create_material_function` | `create_material_function_asset` | Create a new material function asset. |
|
||||
|
||||
## Material Snapshots
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `snapshot_material_graph` | `snapshot_material_expression_graph` | Capture a snapshot of a material's expression graph. |
|
||||
| `diff_material_graph` | `diff_material_graph_vs_snapshot` | Diff a material's current expression graph against a snapshot. |
|
||||
| `restore_material_graph` | `restore_material_graph_from_snapshot` | Restore a material's expression graph from a snapshot. |
|
||||
|
||||
## Animation Blueprints
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `create_anim_blueprint` | `create_anim_blueprint_asset` | Create a new Animation Blueprint asset with a given skeleton. |
|
||||
| `add_anim_state` | `add_anim_state_to_machine` | Add a state node to a state machine graph. |
|
||||
| `remove_anim_state` | `remove_anim_state_from_machine` | Remove a state node from a state machine graph. |
|
||||
| `add_anim_transition` | `add_anim_state_transition` | Add a transition between two states in a state machine. |
|
||||
| `set_transition_rule` | `set_anim_transition_rule` | Set the boolean condition expression for a state machine transition. |
|
||||
| `add_anim_node` | `add_anim_graph_node` | Add an animation node (sequence player, blend space player, etc.) to a state's graph. |
|
||||
| `add_state_machine` | `add_anim_state_machine` | Add a state machine sub-graph to an anim blueprint's AnimGraph. |
|
||||
| `set_state_animation` | `set_anim_state_animation` | Set which animation sequence a state plays. |
|
||||
| `list_anim_slots` | `list_anim_slot_names` | List all animation slot names available in the skeleton's slot groups. |
|
||||
| `list_sync_groups` | `list_anim_sync_groups` | List all animation sync groups defined in the project. |
|
||||
| `create_blend_space` | `create_blend_space_asset` | Create a new Blend Space asset. |
|
||||
| `set_blend_space_samples` | `set_blend_space_sample_points` | Set the sample points (animation + coordinates) on a blend space. |
|
||||
| `set_state_blend_space` | `set_anim_state_blend_space` | Set a state to play a blend space instead of a single animation. |
|
||||
|
||||
## System
|
||||
|
||||
| Current | Proposed | Description |
|
||||
|---------|----------|-------------|
|
||||
| `health` | `health` | Returns server status, mode, and asset counts. Answered on HTTP thread, no game-thread access. |
|
||||
| `rescan` | `rescan_asset_registry` | Re-scan the asset registry and refresh all cached asset lists. |
|
||||
| `shutdown` | `shutdown` | Request graceful engine exit. Only available in commandlet mode. |
|
||||
Reference in New Issue
Block a user