NarshaADK (NarshaMCP)
O NarshaMCP é um servidor MCP para Unreal Engine. Ele é distribuído na Fab como NarshaADK. Ele analisa código-fonte C++, símbolos PDB e arquivos binários .uasset e serve o resultado via MCP. É testado com Claude Code e Codex. A maioria das leituras funciona a partir do disco com o Unreal Editor fechado; edições precisam do Editor.
Documentação
NarshaADK: Servidor MCP para Unreal Engine
NarshaMCP é um servidor MCP para Unreal Engine. Ele é distribuído na Fab como NarshaADK.
Ele analisa código-fonte C++, símbolos PDB e arquivos binários .uasset e serve o resultado via MCP. É testado com
Claude Code e Codex. A maioria das leituras funciona a partir do disco com o Editor do Unreal fechado; edições precisam do Editor.
Obtenha na Fab · Última versão · Documentação
UE 5.7 UE 5.8 Early Access
Acesso Antecipado. Nomes de ferramentas, parâmetros e formatos de saída podem mudar entre versões.
O produto na Fab é chamado NarshaADK. A pasta do plugin instalado, o módulo de código e o executável em tempo de execução são chamados NarshaMCP.
O que você pode fazer
A maioria das ferramentas aceita um argumento operation. A tabela lista operações de leitura comuns. ue_tool_docs retorna todas as operações e seus parâmetros, e seu cliente lista as ferramentas em tools/list.
| Ferramenta | Retorna | Operações de leitura | Editor fechado | Maturidade |
|---|---|---|---|---|
ue_analyze_symbols | Símbolos, chamadores, chamados e hierarquia de classes dos PDBs do projeto; referências cruzadas C++/Blueprint correspondidas com os pacotes de Blueprint | search_symbols, find_callers, find_callees, trace_hierarchy, find_cpp_to_bp, find_bp_to_cpp, impact_analysis | sim | Produção |
ue_manage_blueprint | Eventos, nós, variáveis e padrões, classe pai e AnimGraph de um asset Blueprint | get_event_graph, get_raw_nodes, search_variables, get_variable_default, get_blueprint_metadata, list_blueprints, get_animgraph | sim; edições precisam do Editor | Beta |
ue_fix_errors | Erros do log de build correspondidos a uma correção: o #include ausente, o módulo Build.cs ausente | scan_build_log, preflight, preview | sim; build_and_fix executa um build, get_compiler_results precisa do Editor | Beta |
ue_manage_ai | Estados, tarefas, transições e bindings de StateTree e Behavior Tree | get_summary, get_structure, find_transitions, get_bindings | sim; edições precisam do Editor | Produção |
ue_manage_material | Topologia de nós de material, resumo do grafo e hierarquia de instâncias | get_graph_summary, get_nodes, get_hierarchy, search_materials | sim; arestas baseadas em nome precisam do Editor | Experimental |
ue_manage_niagara | Sistemas Niagara, emissores, renderizadores e parâmetros | get_emitter_details, get_structure, get_parameters, search_systems | sim | Experimental |
ue_manage_pcg | Nós e fluxo do grafo PCG | get_structure, trace_flow, find_nodes, search_graphs | sim | Experimental |
ue_search_assets | Busca de assets e linhas de DataTable; uma carga a frio do índice de referências pode persistir um cache no projeto | search, get_table, find_dependencies, find_references, find_impact | sim | Beta |
ue_analyze_config | Valores de configuração entre camadas do engine e do projeto; declarações de variáveis de console | search_config, explain_config, explore_cvar | sim | Beta |
ue_trace_execution | Um caminho de execução por entrada, abilities, Blueprint e C++ | trace_execution_flow, trace_from_input, trace_ability_flow, trace_gameplay_tag | sim | Beta |
ue_generate_code | Estruturas de classe C++ com macros Unreal e configuração de módulo | generate_class | sim; retorna o conteúdo do arquivo para você salvar | Beta |
ue_grep, ue_glob, ue_read | Busca de texto e nome em código-fonte, assets e configuração | um query, pattern ou identifier; sem operation | sim | Experimental |
ue_check_health informa a versão do runtime e se os índices estão prontos.
Antes e depois
Cada exemplo mostra a solicitação, a chamada de ferramenta MCP e a resposta JSON. Capturado do NarshaMCP v0.13.7 no Epic's Lyra Starter Game (UE 5.8.1) com o Editor fechado. Valores como retornados; chaves removidas e elementos de array são marcados no bloco.
Referências cruzadas C++ e Blueprint
Solicitação. Quais Blueprints chamam StartRangedWeaponTargeting, qual C++ o GA_Weapon_Fire chama e o que deriva de ALyraCharacter?
Antes. grep -rn StartRangedWeaponTargeting encontra a declaração e a definição em C++. Os locais de chamada do Blueprint estão dentro de pacotes binários .uasset.
Chamada. Editor fechado.
{"name": "ue_analyze_symbols", "arguments": {"operation": "find_cpp_to_bp", "function_name": "ULyraGameplayAbility_RangedWeapon::StartRangedWeaponTargeting", "limit": 5}}
Saída. Como retornado; cortes são marcados.
{
"function_name": "ULyraGameplayAbility_RangedWeapon::StartRangedWeaponTargeting",
"total_callers": 2,
"truncated": false,
"blueprint_callers": [
{
"blueprint_name": "GA_Weapon_Fire",
"blueprint_path": "/Game/Weapons/GA_Weapon_Fire",
"owning_function": "K2_ActivateAbility",
"node_name": "K2Node_CallFunction_31",
"match_tier": "qualified",
"confidence": 0.75
},
{
"blueprint_name": "GA_WeaponNetShooter",
"blueprint_path": "/ShooterCore/Weapons/NetShooter_PROTO/GA_WeaponNetShooter",
"owning_function": "K2_ActivateAbility",
"node_name": "K2Node_CallFunction_31",
"match_tier": "qualified",
"confidence": 0.75
}
]
// [truncated] blueprint_callers[] fields omitted: call_type, is_pure; keys omitted: operation, skip_dedup, success
}
Chamada. Editor fechado.
{"name": "ue_analyze_symbols", "arguments": {"operation": "find_bp_to_cpp", "blueprint_name": "GA_Weapon_Fire", "limit": 2, "offset": 18}}
Saída. Como retornado; cortes são marcados.
{
"blueprint_name": "GA_Weapon_Fire",
"total_calls": 33,
"offset": 18,
"truncated": true,
"cpp_calls": [
{
"full_name": "LyraGameplayAbility_RangedWeapon::StartRangedWeaponTargeting",
"owning_function": "K2_ActivateAbility",
"node_name": "K2Node_CallFunction_31",
"is_pure": false
},
{
"full_name": "KismetSystemLibrary::SetTimerDelegate",
"owning_function": "K2_ActivateAbility",
"node_name": "K2Node_CallFunction_4",
"is_pure": false
}
]
// [truncated] cpp_calls[] fields omitted: function_name, owner_class; keys omitted: operation, returned, success, total_count
}
Chamada. Editor fechado.
{"name": "ue_analyze_symbols", "arguments": {"operation": "trace_hierarchy", "class_name": "ALyraCharacter", "direction": "down"}}
Saída. Como retornado; cortes são marcados.
{
"class_name": "ALyraCharacter",
"cpp_descendants_count": 1,
"bp_descendants_count": 10,
"descendants": [
{"depth": 1, "name": "ALyraCharacterWithAbilities", "relation": "child", "source": "pdb"},
{"depth": 1, "name": "Character_Default", "relation": "child_blueprint", "source": "blueprint"},
{"depth": 2, "name": "B_Hero_Default", "relation": "child_blueprint", "source": "blueprint"},
{"depth": 2, "name": "B_ShootingTarget", "relation": "child_blueprint", "source": "blueprint"}
],
"interface_parents": ["IAbilitySystemInterface", "IGameplayCueInterface", "IGameplayTagAssetInterface", "ILyraTeamAgentInterface"]
// [truncated] descendants: 4 of 11 elements; descendants[] fields omitted: parent; keys omitted: 13 of 18
}
Resultado. owning_function é o evento Blueprint que contém a chamada, e match_tier com confidence registra como o símbolo foi correspondido ao nó. descendants[].source é pdb para uma subclasse C++ e blueprint para uma de Blueprint.
Eventos, variáveis e nós de Blueprint
Solicitação. Quais eventos o GA_Weapon_Fire manipula, qual é o atraso de disparo e como um nó é conectado?
Antes. Content/Weapons/GA_Weapon_Fire.uasset é binário, e grep -rn FireDelayTimeSecs sobre o código-fonte não encontra nada: a variável existe apenas no asset.
Chamada. Editor fechado.
{"name": "ue_manage_blueprint", "arguments": {"operation": "get_event_graph", "blueprint_name": "GA_Weapon_Fire"}}
Saída. Como retornado; cortes são marcados.
{
"blueprint_name": "GA_Weapon_Fire",
"count": 5,
"events": [
{"node_title": "FireComplete", "node_class": "K2Node_CustomEvent"},
{"node_title": "FailureMontage Delay Complete", "node_class": "K2Node_CustomEvent"}
]
// [truncated] events: 2 of 5 elements; events[] fields omitted: node_id, owning_function; keys omitted: operation, success
}
Chamada. Editor fechado.
{"name": "ue_manage_blueprint", "arguments": {"operation": "search_variables", "blueprint_name": "GA_Weapon_Fire", "pattern": "*Fire*"}}
Saída. Como retornado; cortes são marcados.
{
"parent_class": "LyraGameplayAbility_RangedWeapon",
"total_count": 2,
"results": [
{
"name": "CharacterFireMontage",
"default_value": "AM_MM_Rifle_Fire",
"default_value_type": "Object",
"edit_condition": "EditDefaultsOnly"
},
{
"name": "FireDelayTimeSecs",
"default_value": "0.1",
"default_value_type": "Double",
"edit_condition": "EditDefaultsOnly"
}
]
// [truncated] results[] fields omitted: 9 of 13; keys omitted: 14 of 17
}
Chamada. Editor fechado.
{"name": "ue_manage_blueprint", "arguments": {"operation": "get_raw_nodes", "blueprint_name": "GA_Weapon_Fire", "page": 1, "page_size": 1}}
Saída. Como retornado; cortes são marcados.
{
"total_nodes": 98,
"has_more": true,
"nodes": [
{
"id": "K2Node_AsyncAction_ListenForGameplayMessages_0",
"node_class": "K2Node_AsyncAction_ListenForGameplayMessages",
"owning_function": "K2_OnAbilityAdded",
"pins": [
{
"name": "execute",
"category": "exec",
"direction": "input",
"linked_to": [
{"node_id": "K2Node_Event_1", "pin_name": "then", "export_index": 70}
]
},
{"name": "then", "category": "exec", "direction": "output", "linked_to": []}
]
}
]
// [truncated] nodes[].pins: 2 of 12 elements; nodes[].pins[].linked_to[] fields omitted: owning_function; nodes[].pins[] fields omitted: container_type, default_value, pin_id, sub_category; nodes[] fields omitted: 5 of 9; keys omitted: 10 of 13
}
Resultado. parent_class, events[].node_title e results[].default_value são lidos do .uasset. pins[].linked_to nomeia o nó e o pino ao qual cada pino se conecta; onde um id de nó se repete dentro de um asset, export_index identifica o endpoint.
Resumo do grafo de material
Solicitação. Como o M_TeamColorBasic é construído?
Antes. M_TeamColorBasic.uasset é binário; o grafo de expressões não está em nenhum arquivo de texto.
Chamada. Editor fechado.
{"name": "ue_manage_material", "arguments": {"operation": "get_graph_summary", "material_path": "/Game/Characters/Cosmetics/M_TeamColorBasic"}}
Saída. Como retornado; cortes são marcados.
{
"material_name": "M_TeamColorBasic",
"source": "uasset_metadata_cache",
"node_count": 4,
"connection_count": 3,
"stage_count": 3,
"output_chains": [
{"output_pin": "Material", "root_node": "MaterialExpressionVectorParameter_3", "upstream_node_count": 1},
{"output_pin": "Material", "root_node": "MaterialExpressionAdd_0", "upstream_node_count": 4}
]
// [truncated] output_chains: 2 of 3 elements; output_chains[] fields omitted: exclusive_node_count, role, top_node_types; keys omitted: 6 of 12
}
Resultado. Com o Editor fechado, a resposta tem a contagem de nós, a contagem de conexões e o nó raiz de cada cadeia de saída. ue_manage_material é Experimental; com o Editor em execução, sua operação get_nodes adiciona nomes de nós e arestas baseadas em nome.
Estados e transições de StateTree
Solicitação. O que o StateTree L_STT_FollowPlayer faz?
Antes. L_STT_FollowPlayer.uasset é binário, e grep -rn L_STT_FollowPlayer sobre o código-fonte não encontra nada: nenhum código descreve esta árvore.
Chamada. Editor fechado.
{"name": "ue_manage_ai", "arguments": {"operation": "get_summary", "ai_type": "statetree", "asset_name": "L_STT_FollowPlayer"}}
Saída. Como retornado; cortes são marcados.
{
"asset_name": "L_STT_FollowPlayer",
"root_state": "Root",
"state_count": 9,
"property_binding_count": 19,
"states": [
{
"name": "Wait 3s Follow",
"tasks": ["StateTreeDebugTextTask", "StateTreeDelayTask"],
"transitions": [
{"trigger": "OnStateCompleted", "to_state": "Wait 3s Follow TooClose"},
{"trigger": "OnStateCompleted", "to_state": "Follow"}
]
},
{
"name": "Follow",
"tasks": ["STT_Follow"],
"transitions": [
{"trigger": "OnStateSucceeded", "to_state": "Root"},
{"trigger": "OnStateFailed", "to_state": "Wait 3s FailFollow"}
]
}
]
// [truncated] states: 2 of 9 elements; states[] fields omitted: conditions, enabled, state_type; keys omitted: 11 of 16
}
Resultado. states[].tasks lista as tarefas de cada estado e states[].transitions[].to_state lista suas transições de saída.
Emissor Niagara
Solicitação. O que o emissor NE_ImpactCore do NS_ImpactGlass renderiza?
Antes. NS_ImpactGlass.uasset é binário.
Chamada. Editor fechado.
{"name": "ue_manage_niagara", "arguments": {"operation": "get_emitter_details", "asset_name": "NS_ImpactGlass", "emitter_name": "NE_ImpactCore"}}
Saída. Como retornado; cortes são marcados.
{
"system_name": "NS_ImpactGlass",
"emitter_name": "NE_ImpactCore",
"emitter_data": {
"loop_behavior": "Once",
"renderer_count": 2,
"renderers": [
{"renderer_type": "NiagaraSpriteRendererProperties", "facing_mode": "FaceCamera"},
{"renderer_type": "NiagaraSpriteRendererProperties", "facing_mode": "FaceCamera"}
],
"data_interface_count": 2,
"data_interfaces": [
{"di_type": "NiagaraDataInterfaceArrayFloat3"},
{"di_type": "NiagaraDataInterfaceArrayPosition"}
]
}
// [truncated] emitter_data.renderers[] fields omitted: 5 of 7; emitter_data.data_interfaces[] fields omitted: name; emitter_data fields omitted: 21 of 26; keys omitted: mode, operation, requested_path, success
}
Resultado. renderers[].renderer_type é a classe do renderizador e data_interfaces[].di_type é o tipo de interface de dados. ue_manage_niagara é Experimental.
Grafo de Animation Blueprint
Solicitação. Qual é o tamanho do ABP_Mannequin_Base e qual skeleton ele usa como alvo?
Antes. ABP_Mannequin_Base.uasset é binário.
Chamada. Editor fechado.
{"name": "ue_manage_blueprint", "arguments": {"operation": "get_animgraph", "blueprint_name": "ABP_Mannequin_Base", "detail_level": "summary"}}
Saída. Como retornado; cortes são marcados.
{
"blueprint_name": "ABP_Mannequin_Base",
"target_skeleton": "SK_Mannequin",
"source": "metadata_category:anim_blueprints",
"anim_graph_node_count": 138,
"state_machine_count": 1,
"pose_link_count": 25,
"anim_node_types": {
"anim_state": 10,
"anim_state_transition": 27,
"anim_blend_space": 3,
"anim_linked_layer": 14
}
// [truncated] anim_node_types fields omitted: 15 of 19; keys omitted: 6 of 13
}
Resultado. target_skeleton nomeia o skeleton e anim_node_types conta os nós do grafo por tipo. Aumente detail_level para ler uma única máquina de estados.
PCG
Lyra não inclui nenhum grafo PCG, então PCG não é mostrado aqui. ue_manage_pcg get_structure lê um grafo PCG com o Editor fechado e é Experimental; ele está listado na tabela de comparação abaixo.
Mock-up, não uma sessão capturada. Para C2065: 'UAbilitySystemComponent': identificador não declarado, ue_fix_errors adiciona o #include, adiciona GameplayAbilities ao Build.cs e muda para IAbilitySystemInterface.
Uma sessão no Claude Code
Mock-up de uma sessão do Claude Code que chama ue_analyze_symbols, depois ue_generate_code, depois ue_fix_errors.
Requisitos
- Windows 64 bits
- Um projeto C++ de Unreal Engine 5.7 ou 5.8. Projetos somente Blueprint não são suportados.
- Visual Studio 2022 com as ferramentas de build C++ do Unreal Engine
- Um cliente MCP. Testado com Claude Code e Codex. Clientes de IA são produtos separados e podem precisar de sua própria assinatura.
- Python e Node.js não são necessários; o runtime é um executável pré-compilado dentro do ZIP do plugin.
Instalação
Da Fab. Instale o NarshaADK da listagem na Fab e habilite o plugin NarshaMCP em um projeto C++.
Das Releases do GitHub
- Baixe o ZIP para a versão do seu engine na última versão.
- Extraia o ZIP em
YourProject/Plugins/. O ZIP já contém a pastaNarshaMCP, então o plugin fica emYourProject/Plugins/NarshaMCP/. Ao atualizar, remova a pastaPlugins/NarshaMCP/anterior primeiro e mantenha uma cópia se quiser reverter. - Compile o projeto C++ uma vez. O primeiro build executa a configuração local e grava a configuração MCP do projeto, a menos que o plugin tenha sido instalado no modo somente plugin.
- Abra a seção AI Clients do dashboard local e confirme a conexão com Claude Code ou Codex.
- Verifique pelo cliente: chame
ue_check_health. Ele retornastatuseversion. A primeira inicialização indexa os PDBs que seu build produziu. Enquanto o índice está sendo construído, operações de símbolo retornam"status": "symbol_index_loading", com um objetoprogressassim que o total for conhecido; chame novamente quando terminar.symbol_index_degraded_budgetsignifica que um orçamento de memória limitou o índice, e esperar não o limpa.
Conecte seu cliente MCP
O primeiro build grava a configuração MCP do projeto para você. Se você configurar um cliente manualmente, aponte-o para o runtime que acompanha o plugin:
{
"mcpServers": {
"narshamcp": {
"command": "<Project>/Plugins/NarshaMCP/Source/ThirdParty/bin/narshamcp.exe",
"args": ["connect", "--project-path", "<Project>"],
"env": { "RUST_LOG": "error" }
}
}
}
- Claude Code:
claude mcp add narshamcp -- "<Project>/Plugins/NarshaMCP/Source/ThirdParty/bin/narshamcp.exe" connect --project-path "<Project>" - Codex, em
~/.codex/config.toml, com barras normais no caminho:
[mcp_servers.narshamcp]
command = "<Project>/Plugins/NarshaMCP/Source/ThirdParty/bin/narshamcp.exe"
args = ["connect", "--project-path", "<Project>"]
connect conecta o cliente ao daemon em segundo plano do projeto e o inicia quando nenhum está em execução. Clientes que iniciam o servidor como um processo direto, como Cursor, usam --stdio no lugar de connect.
Como funciona
| Camada | O que o NarshaADK lê |
|---|---|
| Análise de código-fonte | Código-fonte C++, com macros como UPROPERTY, UFUNCTION e DOREPLIFETIME resolvidas |
| Índice de símbolos do compilador | Os dados de depuração PDB que seu build produz: hierarquias de classes, grafos de chamadas e buscas de símbolos |
| Análise de assets binários | Pacotes .uasset, sem commandlets ou o Editor. Operações que alteram assets precisam de um Editor em execução |
O índice de símbolos é construído a partir dos PDBs do seu próprio build, então ele cobre as classes do seu projeto, e as do engine quando os símbolos de depuração do engine estão instalados. Ele precisa de um build bem-sucedido.
O Unreal MCP embutido no UE 5.8 roda dentro do Editor. O NarshaMCP lê o projeto do disco, então o Editor pode estar fechado, e ele indexa PDBs para um grafo de chamadas C++. A tabela abaixo compara os dois, leitura por leitura.
O que ele não pode fazer (ainda)
- Ativos cozidos (cooked) não podem ser lidos. O processo de cooking remove o grafo de nós do editor dos dados do jogo empacotado.
- Os pinos de dados de Blueprints são retornados apenas como conexões; os valores não são avaliados. Apenas a ordem de execução é rastreada.
- Arestas latentes, assíncronas e de delegate são aproximadas.
- Projetos somente Blueprint não são suportados; um projeto C++ é obrigatório.
- Um Editor em execução é necessário para toda operação que cria ou edita um ativo, para spawn de atores, para testes de automação, para
ue_fix_errorsget_compiler_results, e para os nomes de nós e arestas baseadas em nomes deue_manage_materialget_nodes. As operações de leitura listadas na tabela acima funcionam com o Editor fechado. - Uma resposta acima do limite de tamanho inline do runtime é retornada como um
detail_handlepara um arquivo local, queue_cache_controlresolve_detail_handlecarrega. Solicite uma leitura mais restrita, como um emissor ou umlimit, para obter os dados inline.
Até onde ele lê, em comparação com outros servidores MCP do Unreal
O que cada servidor pode ler e entregar a um agente, e se essa leitura funciona com o Editor fechado. ✅ lê os arquivos do projeto; o Editor nunca precisa ser executado · ● no Editor em execução (uma escolha de design) · — não fornecido · ? não confirmado no pino mostrado · sobrescrito p = parcial.
| O que é lido | NarshaADK v0.13.7 · 2026-09-13 | Unreal MCP (integrado ao UE 5.8) UE 5.8.0 · 2026-06-27 | VibeUE kevinpbuckley/VibeUE@0ea59b3 · 2026-09-20 (leitura em 2026-09-22) | unreal-mcp (sam-david) sam-david/unreal-mcp@8b88ec3 · 2026-03-28 (leitura em 2026-09-22) | unreal-mcp (ZiggyMar) ZiggyMar/unreal-mcp@d1a8539 · 2026-09-07 (leitura em 2026-09-22) |
|---|---|---|---|---|---|
| Leitura com o Editor fechado | ✅p | ● | ● | ✅p | ● |
| Grafos de Blueprint: nós, pinos, fluxo de execução | ✅ | ● | ● | ? | ● |
| Variáveis, funções, componentes e padrões de Blueprint | ✅ | ●p | ● | ●p | ● |
| Grafos e expressões de materiais | ✅p | ● | ● | ●p | ●p |
| Sistemas, emissores e módulos Niagara | ✅ | ● | ● | — | ●p |
| Grafos PCG | ✅ | ● | — | — | — |
| Animation Blueprints, montagens, blend spaces | ✅ | ●p | ●p | — | ●p |
| DataTables, structs, enums | ✅ | ●p | ●p | — | ● |
| Widgets / árvores UMG | ✅ | ● | ● | — | ● |
| Arquivos de configuração e variáveis de console | ✅p | ● | ● | — | ●p |
| Hierarquia de classes: classes base e ancestralidade | ✅ | ●p | ●p | ●p | ● |
| Grafo de chamadas: chamadores e chamados | ✅ | — | — | — | ●p |
| Análise de impacto de mudanças | ✅ | ●p | ●p | ●p | ●p |
| Erros de build e logs | ✅p | ●p | ●p | ✅p | ● |
| Rastreamentos do Unreal Insights | ✅ | — | ● | — | — |
| Referências e dependências de ativos | ✅ | ● | — | ● | ● |
| Criar ou modificar ativos (escrita) | ● | ● | ● | ● | ● |
Onde outros servidores vão além
- O servidor integrado do motor acompanha o Unreal Engine como um plugin do motor, então não há nada separado para baixar. NarshaADK instala como seu próprio pacote de plugin, com um runtime pré-compilado dentro dele. (Unreal MCP (integrado ao UE 5.8))
- O servidor do sam-david controla o Editor por meio da execução remota Python integrada do motor, então a maioria de suas ferramentas funciona sem compilar um plugin no projeto. NarshaADK precisa de um projeto C++ (projetos somente Blueprint não são suportados) e, para suas leituras de símbolos, dos PDBs de um build bem-sucedido. (sam-david/unreal-mcp@8b88ec3 · src/transports/connection-manager.ts, sam-david/unreal-mcp@8b88ec3 · src/transports/python-exec.ts, sam-david/unreal-mcp@8b88ec3 · src/tools/blueprint.ts)
- O servidor do VibeUE e o do ZiggyMar são open source sob a licença MIT, então podem ser lidos, bifurcados e modificados. NarshaADK é um produto comercial: o código-fonte do plugin C++ do Unreal acompanha o pacote, mas o código-fonte do runtime não. (kevinpbuckley/VibeUE@0ea59b3 · LICENSE, ZiggyMar/unreal-mcp@d1a8539 · LICENSE)
Notas — o que cada marca cobre e não cobre
- **Leituras com o Editor fechado — NarshaADK:** A análise de ativos binários, o índice de símbolos do compilador, a análise de configuração e a análise de logs de build são executadas com o Editor fechado. Quando uma linha está marcada como parcial, a nota dessa própria linha indica o que a marca não cobre. A escrita de ativos, a criação de atores e a execução de automação exigem o Editor. Requer um projeto C++ e os PDBs de um build bem-sucedido; as leituras de símbolos refletem esse build até o próximo. Ativos cozidos não são suportados. - **Leituras com o Editor fechado — Unreal MCP (integrado ao UE 5.8):** Ferramentas em processo servidas pelo Editor via HTTP. Esta coluna é a única que não é lida de um repositório: foi medida enumerando os conjuntos de ferramentas ao vivo em um Editor na versão do mecanismo mostrada, e os conjuntos de ferramentas são distribuídos por trás de plugins, então um conjunto ausente dessa enumeração está ausente daquela instalação, não do mecanismo. - **Leituras com o Editor fechado — VibeUE:** Estende o endpoint MCP do próprio Editor; não há servidor separado. - **Leituras com o Editor fechado — unreal-mcp (sam-david):** Um servidor autônomo que envia Python ao Editor por meio de sua execução remota integrada, com a API de Controle Remoto como fallback e um plugin de ponte opcional para comandos de grafo; apenas suas ferramentas de build, que executam a ferramenta de build do mecanismo como um processo filho e retornam a saída do compilador analisada, leem com o Editor fechado, enquanto leituras de ativos, Blueprints, materiais, níveis e sequências exigem o Editor. - **Leituras com o Editor fechado — unreal-mcp (ZiggyMar):** Um servidor Node encaminha chamadas de ferramentas via TCP local para um plugin C++ em execução dentro do Editor. As ferramentas de log, código-fonte C++ e compilação C++ leem arquivos ou executam o build a partir do processo do servidor, mas localizam o projeto perguntando primeiro ao Editor. - **Grafos de Blueprint: nós, pinos, fluxo de execução — unreal-mcp (sam-david):** A ferramenta de listagem de nós de grafo encaminha para um plugin de ponte opcional cujo código-fonte não está no repositório neste commit, e sem esse plugin ela retorna um erro; o que o plugin retornaria não pôde ser verificado. - **Variáveis, funções, componentes e padrões de Blueprint — Unreal MCP (integrado ao UE 5.8):** Variáveis, funções e padrões de Blueprint são leituras nomeadas; a enumeração não nomeia nenhuma leitura da lista de componentes de um Blueprint, porque as unidades de componentes do conjunto de ferramentas de Blueprint vinculam ou listam eventos, e as unidades que leem componentes pertencem ao conjunto de ferramentas de atores e exigem um ator colocado. - **Variáveis, funções, componentes e padrões de Blueprint — unreal-mcp (sam-david):** Sua ferramenta de informações de Blueprint retorna a classe pai e a lista de componentes, esta última obtida criando um ator temporário; variáveis, funções e padrões não estão entre os campos que seu script lê, embora a descrição da ferramenta os nomeie. - **Grafos e expressões de material — NarshaADK:** Topologia de nós offline e resumo do grafo; arestas baseadas em nomes ao vivo quando o Editor está em execução. A ferramenta de material é Experimental. - **Grafos e expressões de material — unreal-mcp (sam-david):** Lista os nós de expressão de um material por nome e classe; conexões entre expressões não são lidas de volta. - **Grafos e expressões de material — unreal-mcp (ZiggyMar):** Os parâmetros escalares, de cor e de textura expostos de um material são lidos; o grafo de expressões em si não tem ferramenta de leitura, apenas a escrita que constrói um. - **Sistemas, emissores e módulos Niagara — unreal-mcp (sam-david):** As ferramentas Niagara criam sistemas e definem, redefinem ou reinicializam seus parâmetros; nenhuma lê os emissores ou módulos de um sistema de volta. - **Sistemas, emissores e módulos Niagara — unreal-mcp (ZiggyMar):** Emissores, se cada um está desabilitado, e os parâmetros do usuário são lidos; os módulos dentro de um emissor não são. - **Grafos PCG — VibeUE:** Nenhum serviço PCG próprio, e o conjunto de ferramentas PCG do mecanismo está listado entre os não habilitados aqui; seu documento de habilidades roteia PCG através do script Python geral do mecanismo, o que não rende marca para nenhum servidor aqui. - **Grafos PCG — unreal-mcp (sam-david):** Nenhuma ferramenta PCG entre os módulos que o servidor registra. - **Grafos PCG — unreal-mcp (ZiggyMar):** Nenhuma ferramenta PCG entre as ferramentas que registra; PCG é acessível apenas delegando ao servidor integrado do mecanismo através de uma ferramenta de passagem, o que não rende marca aqui. - **Blueprints de Animação, montagens, blend spaces — Unreal MCP (integrado ao UE 5.8):** Os conjuntos de ferramentas enumerados de malha esquelética e ativos de física retornam esqueletos, ossos, soquetes, alvos de morph e corpos físicos; nenhum deles retorna um grafo de Blueprint de Animação, as seções de uma montagem ou um blend space. - **Blueprints de Animação, montagens, blend spaces — VibeUE:** Grafos de Blueprint de Animação e montagens são lidos em profundidade; um blend space é apenas um caminho de ativo atribuído a um nó de jogador, nunca lido de volta. - **Blueprints de Animação, montagens, blend spaces — unreal-mcp (sam-david):** O módulo de animação cria Blueprints de Animação e montagens e lê a duração, a contagem de quadros e o esqueleto de uma sequência de animação; nenhuma ferramenta lê um grafo de Blueprint de Animação, as seções de uma montagem ou um blend space. - **Blueprints de Animação, montagens, blend spaces — unreal-mcp (ZiggyMar):** Máquinas de estado, estados e condições de transição de Blueprint de Animação têm um leitor dedicado; montagens e blend spaces não têm nenhum próprio e alcançam um agente apenas como as configurações editáveis que o leitor de ativos simples retorna. - **DataTables, structs, enums — Unreal MCP (integrado ao UE 5.8):** Linhas e esquema de DataTable, e uma listagem genérica de propriedades de objeto; sua ferramenta de struct de linha pesquisa tipos de linha, e a única leitura de enum nomeada na enumeração está dentro do conjunto de ferramentas Niagara. - **DataTables, structs, enums — VibeUE:** Enums e structs são lidos por seu próprio serviço; nenhum cabeçalho de serviço DataTable existe neste commit, e leituras de DataTable alcançam um agente através do conjunto de ferramentas da Epic no endpoint que o VibeUE estende, então são marcadas na coluna do servidor integrado, não aqui. - **DataTables, structs, enums — unreal-mcp (sam-david):** Nenhuma ferramenta de DataTable, struct ou enum entre os módulos que o servidor registra. - **Widgets / árvores UMG — unreal-mcp (sam-david):** A única ferramenta de widget abre um Widget de Utilitário do Editor como uma aba; nada lê uma árvore de widgets. - **Arquivos de configuração e variáveis de console — NarshaADK:** Arquivos de configuração são lidos do disco nas camadas do mecanismo e do projeto; variáveis de console são lidas como declarações, padrões e flags analisados do código-fonte do mecanismo unido a essas camadas, não como valores atuais de um mecanismo em execução. - **Arquivos de configuração e variáveis de console — unreal-mcp (sam-david):** Nenhuma leitura de INI ou variável de console entre os módulos que o servidor registra; a ferramenta de plugin lê a lista de plugins do arquivo do projeto, e comandos de console passam por uma ferramenta de comando genérica que não rende marca aqui. - **Arquivos de configuração e variáveis de console — unreal-mcp (ZiggyMar):** Lê o GameMode padrão do projeto, o mapa e seus mapeamentos de entrada legados; nenhuma ferramenta lê arquivos INI ou variáveis de console, e a ferramenta de comando de console é um console geral, não um leitor de configuração. - **Hierarquia de classes: classes base e ancestralidade — Unreal MCP (integrado ao UE 5.8):** Uma busca de classe, uma busca de pai de Blueprint e uma busca de subclasse; nenhuma unidade enumerada retorna a cadeia de ancestralidade de uma classe. - **Hierarquia de classes: classes base e ancestralidade — VibeUE:** Seu serviço de Blueprint relata a classe pai de um Blueprint, e a listagem de funções substituíveis nomeia a classe de onde cada função vem; nenhum serviço retorna a cadeia de ancestralidade em si, e nenhum relata uma hierarquia de classes C++. - **Hierarquia de classes: classes base e ancestralidade — unreal-mcp (sam-david):** A ferramenta de informações de Blueprint relata a classe pai direta de um Blueprint; não há caminhada de ancestralidade e nenhuma ferramenta para hierarquia de classes C++. - **Grafo de chamadas: chamadores e chamados — Unreal MCP (integrado ao UE 5.8):** Nenhuma ferramenta de símbolo ou grafo de chamadas entre os conjuntos de ferramentas enumerados. - **Grafo de chamadas: chamadores e chamados — VibeUE:** Nenhum serviço de código-fonte ou símbolo entre seus cabeçalhos, e as ferramentas em ponte que descobrem módulos, classes e funções inspecionam a API Python do Editor em vez de chamadores ou chamados C++. - **Grafo de chamadas: chamadores e chamados — unreal-mcp (sam-david):** Nenhum módulo de código-fonte ou símbolo entre os que o servidor registra, então chamadores e chamados C++ não são lidos. - **Grafo de chamadas: chamadores e chamados — unreal-mcp (ZiggyMar):** Cada ponto de chamada de Blueprint de uma função, com se pode ser executado, e as chamadas ordenadas dentro de um grafo são lidos; chamadas feitas a partir de código C++ não são rastreadas. - **Análise de impacto de mudanças — Unreal MCP (integrado ao UE 5.8):** Leituras de dependência e referência de ativos e uma busca de subclasse respondem o que uma mudança em um ativo ou classe alcançaria; a enumeração não carrega grafo de chamadas, então o efeito de mudar uma função não está entre o que ela relata. - **Análise de impacto de mudanças — VibeUE:** Uma consulta somente leitura lista cada seletor de nó de Behavior Tree vinculado a uma chave de blackboard, para que uma renomeação ou remoção possa ser avaliada primeiro; nenhum serviço relata o que uma mudança em uma classe ou ativo afetaria. - **Análise de impacto de mudanças — unreal-mcp (sam-david):** Leituras de dependência e referência de ativos respondem o que uma mudança em um ativo alcançaria; nada entre suas ferramentas registradas relata chamadores ou chamados, então o efeito de mudar uma função não está entre o que ela relata. - **Análise de impacto de mudanças — unreal-mcp (ZiggyMar):** Leituras de referência de ativos e rastreamento de chamadas e variáveis de Blueprint em todo o projeto respondem o que uma mudança em um ativo, um membro de Blueprint ou uma função chamada de Blueprints alcançaria; chamadas feitas a partir de código C++ não são rastreadas, então o efeito sobre outro código C++ não está entre o que ela relata. - **Erros e logs de build — NarshaADK:** Logs de build são detectados e analisados com o Editor fechado; resultados ao vivo do compilador são lidos de um Editor em execução. - **Erros e logs de build — Unreal MCP (integrado ao UE 5.8):** O conjunto de ferramentas de log enumerado retorna entradas de log do Editor; a enumeração não nomeia nenhuma ferramenta de build ou resultados de compilador, então mensagens do compilador alcançam um agente apenas como linhas nesse log. - **Erros e logs de build — VibeUE:** Uma ferramenta em ponte retorna entradas de log do Editor, seu próprio serviço de desempenho lê o log de volta como parte de um resumo de execução, e seu serviço de Blueprint retorna mensagens do compilador de um Blueprint quando o compila; seu caminho de build é um script de shell em vez de uma ferramenta, então a saída do compilador C++ não está entre o que ele lê. - **Erros e logs de build — unreal-mcp (sam-david):** Sua ferramenta de build executa a ferramenta de build do mecanismo como um processo filho com o Editor fechado e retorna os erros e avisos do compilador analisados dessa saída, e uma segunda ferramenta analisa um log de build passado a ela; o log do próprio Editor não é lido. - **Rastreamentos do Unreal Insights — Unreal MCP (integrado ao UE 5.8):** Nenhum conjunto de ferramentas de perfilagem entre as ferramentas enumeradas. - **Rastreamentos do Unreal Insights — unreal-mcp (sam-david):** As ferramentas de perfilagem iniciam e param uma captura de rastreamento ou um perfil CSV e emitem comandos stat; nenhuma lê um rastreamento gravado de volta. - **Rastreamentos do Unreal Insights — unreal-mcp (ZiggyMar):** Nenhuma ferramenta de perfilagem ou rastreamento entre as ferramentas que registra; a ferramenta de comando de console pode emitir comandos stat, o que não rende marca aqui. - **Referências e dependências de ativos — VibeUE:** Seu próprio serviço de ativos cobre importação, exportação, exclusão e seleção, e referenciadores aparecem apenas como o payload de recusa de uma tentativa de exclusão; as consultas de referência e dependência alcançam um agente através do conjunto de ferramentas da Epic no endpoint que o VibeUE estende, então são marcadas na coluna do servidor integrado, não aqui. - **Maturidade das ferramentas — NarshaADK:** Maturidade das ferramentas nesta versão: análise de símbolos é Production; as ferramentas de Blueprint, configuração, erro de build, busca de ativos e estrutura de Sequencer são Beta; as ferramentas de Material, Niagara, PCG e Insights são Experimental, assim como as ferramentas de keyframe, reprodução e trilhas de Sequencer; as ferramentas de Widget, Animação e diff de ativos ainda não têm classificação de maturidade.Versões suportadas
| Unreal Engine | Pacote do plugin |
|---|---|
| UE 5.8 | NarshaMCP-v<version>-UE5.8-Release-RustMCP.zip |
| UE 5.7 | NarshaMCP-v<version>-UE5.7-Release-RustMCP.zip |
Cada versão inclui estes arquivos:
NarshaMCP-v<version>-UE5.7-Release-RustMCP.zipeNarshaMCP-v<version>-UE5.8-Release-RustMCP.zipsão os mesmos ZIPs do plugin enviados à Fab. Eles contêm o código-fonte C++ do Unreal do plugin, que seu projeto compila, e o runtime como um executável pré-compilado. O código-fonte do próprio runtime não está incluído.narshamcp-windows-x64.exeé o runtime Windows autônomo, byte idêntico ao runtime dentro dos ZIPs.
As notas de cada versão listam o resumo SHA-256 de cada arquivo. Os avisos de software de terceiros acompanham o runtime: execute narshamcp --licenses (ou narshamcp --licenses-json).
Licença
O NarshaADK é licenciado sob o Contrato de Licença de Usuário Final da Fab (a "Licença Padrão da Fab"). As cópias baixadas deste repositório recebem os mesmos termos diretamente da Next Stage Inc.: o nível Pessoal se aplica sem custo se você, juntamente com qualquer entidade controladora e qualquer entidade sob controle comum com você, não gerou mais do que o limite de receita da Fab com atividade comercial na indústria de conteúdo digital nos últimos 12 meses (USD 100.000 quando isto foi escrito; o EULA da Fab informa o valor atual). Acima disso, é necessária uma licença Profissional adquirida por meio da listagem na Fab. O LICENSE.md informa o limite e os termos completos.
Suporte
Documentação e exemplos estão em narshaadk.ai. Para fazer perguntas ou relatar problemas, use o canal de suporte na listagem na Fab.
O NarshaADK é desenvolvido e mantido pela Next Stage Inc.
