@tugcantopaloglu/godot-mcp
npm
v1.0.0
Published by @tugcantopaloglu — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.
MCP server for full Godot 4.x engine control — 165 tools for AI-driven game development
The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.
1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:
The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.
2. Client adoption risk — 100 − 11 = 89. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:
| Points | Adoption-risk factor |
|---|---|
| −10 | capability blast radius (critical) — client exposure if the model is manipulated |
| −1 | publisher verification (public source) — no provenance, but the source is public and inspectable |
Capability observations and info notes are shown under Findings but never scored.
Open any row's finding below for the file, line and evidence behind a deduction.
This server (without client built-ins) exposes a complete data-exfiltration chain: read_project_settings → game_get_logs → game_eval. Untrusted input is ingested, private data is read, and it can be sent to an external sink via the agent composing the tools (→). Static analysis proves the primitive exists, not that a specific run will occur.
Fix: Remove one leg of the trifecta: isolate untrusted-input tools from secret-reading tools and from egress tools, or require human approval between them.
Location: flow read_project_settings → game_get_logs → game_eval
Tool "game_eval" appears to run shell commands or evaluate code (keyword "eval" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool game_eval
Tool "game_spawn_node" appears to run shell commands or evaluate code (keyword "spawn" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool game_spawn_node
In the server's implementation (`build/index.js:12`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: spawn, execFile } from 'child_process'; import { promisify } from 'util'; import { createConnection } from 'net'; import
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server build/index.js
Tool "game_http_request" takes a URL/host parameter "url" with no allowlist/pattern. An outbound-request tool with an unbounded destination enables SSRF and cloud-metadata access (e.g. 169.254.169.254).
Fix: Allowlist destinations or constrain the parameter; block private/link-local addresses server-side.
Location: tool game_http_request · inputSchema.properties.url
Tool "game_websocket" takes a URL/host parameter "url" with no allowlist/pattern. An outbound-request tool with an unbounded destination enables SSRF and cloud-metadata access (e.g. 169.254.169.254).
Fix: Allowlist destinations or constrain the parameter; block private/link-local addresses server-side.
Location: tool game_websocket · inputSchema.properties.url
Tool "write_file" can write, overwrite or delete files (keyword "write_file" in tool name). Verify it is scoped to a safe directory.
Fix: Constrain file operations to an explicit, non-sensitive root; reject path traversal.
Location: tool write_file
Tool "delete_file" can write, overwrite or delete files (keyword "delete_file" in tool name). Verify it is scoped to a safe directory.
Fix: Constrain file operations to an explicit, non-sensitive root; reject path traversal.
Location: tool delete_file
Tool "game_eval" takes a command-shaped parameter "code" with no enum/pattern constraint. Free-form, model- or attacker-controlled arguments reaching a shell is the command-injection precondition.
Fix: Constrain the parameter (enum/pattern), or build the command from a fixed template with escaped args.
Location: tool game_eval · inputSchema.properties.code
Tool "game_eval" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool game_eval
Tool "write_file" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool write_file
Tool "delete_file" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool delete_file
Tool "game_spawn_node" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool game_spawn_node
Tool "read_file" takes a path parameter "filePath" with no constraint. Without a canonicalize-and-contain check (not visible statically), this permits ../ traversal outside the intended root.
Fix: Resolve and verify the path stays within an allowed root; reject traversal sequences.
Location: tool read_file · inputSchema.properties.filePath
Tool "write_file" takes a path parameter "filePath" with no constraint. Without a canonicalize-and-contain check (not visible statically), this permits ../ traversal outside the intended root.
Fix: Resolve and verify the path stays within an allowed root; reject traversal sequences.
Location: tool write_file · inputSchema.properties.filePath
Tool "delete_file" takes a path parameter "filePath" with no constraint. Without a canonicalize-and-contain check (not visible statically), this permits ../ traversal outside the intended root.
Fix: Resolve and verify the path stays within an allowed root; reject traversal sequences.
Location: tool delete_file · inputSchema.properties.filePath
Each tool and what it can reach — statically extracted from the published source.
delete_filewrites filesgame_evalruns code / shellgame_get_logsreads sensitive datagame_http_requestnetwork egressgame_spawn_noderuns code / shellgame_websocketnetwork egressread_filereads sensitive dataread_project_settingsingests untrusted inputwrite_filewrites filesadd_nodeno sensitive capabilityattach_scriptno sensitive capabilitycreate_directoryno sensitive capabilitycreate_projectno sensitive capabilitycreate_resourceno sensitive capabilitycreate_sceneno sensitive capabilitycreate_scriptno sensitive capabilityexport_mesh_libraryno sensitive capabilityexport_projectno sensitive capabilitygame_3d_effectsno sensitive capabilitygame_add_collisionno sensitive capabilitygame_animation_controlno sensitive capabilitygame_animation_treeno sensitive capabilitygame_audio_busno sensitive capabilitygame_audio_bus_layoutno sensitive capabilitygame_audio_effectno sensitive capabilitygame_audio_playno sensitive capabilitygame_audio_spatialno sensitive capabilitygame_await_signalno sensitive capabilitygame_bone_poseno sensitive capabilitygame_call_methodno sensitive capabilitygame_camera_attributesno sensitive capabilitygame_canvasno sensitive capabilitygame_canvas_drawno sensitive capabilitygame_change_sceneno sensitive capabilitygame_clickno sensitive capabilitygame_connect_signalno sensitive capabilitygame_create_animationno sensitive capabilitygame_create_jointno sensitive capabilitygame_create_timerno sensitive capabilitygame_csgno sensitive capabilitygame_debug_drawno sensitive capabilitygame_disconnect_signalno sensitive capabilitygame_emit_signalno sensitive capabilitygame_environmentno sensitive capabilitygame_find_nodes_by_classno sensitive capabilitygame_gamepadno sensitive capabilitygame_get_audiono sensitive capabilitygame_get_camerano sensitive capabilitygame_get_errorsno sensitive capabilitygame_get_node_infono sensitive capabilitygame_get_nodes_in_groupno sensitive capabilitygame_get_propertyno sensitive capabilitygame_get_scene_treeno sensitive capabilitygame_get_uino sensitive capabilitygame_gino sensitive capabilitygame_gridmapno sensitive capabilitygame_input_actionno sensitive capabilitygame_input_stateno sensitive capabilitygame_instantiate_sceneno sensitive capabilitygame_key_holdno sensitive capabilitygame_key_pressno sensitive capabilitygame_key_releaseno sensitive capabilitygame_light_2dno sensitive capabilitygame_light_3dno sensitive capabilitygame_list_signalsno sensitive capabilitygame_localeno sensitive capabilitygame_manage_groupno sensitive capabilitygame_mesh_instanceno sensitive capabilitygame_mouse_dragno sensitive capabilitygame_mouse_moveno sensitive capabilitygame_multimeshno sensitive capabilitygame_multiplayerno sensitive capabilitygame_navigate_pathno sensitive capabilitygame_navigation_3dno sensitive capabilitygame_os_infono sensitive capabilitygame_parallaxno sensitive capabilitygame_path_2dno sensitive capabilitygame_path_3dno sensitive capabilitygame_pauseno sensitive capabilitygame_performanceno sensitive capabilitygame_physics_2dno sensitive capabilitygame_physics_3dno sensitive capabilitygame_physics_bodyno sensitive capabilitygame_play_animationno sensitive capabilitygame_procedural_meshno sensitive capabilitygame_process_modeno sensitive capabilitygame_raycastno sensitive capabilitygame_remove_nodeno sensitive capabilitygame_render_settingsno sensitive capabilitygame_reparent_nodeno sensitive capabilitygame_resourceno sensitive capabilitygame_rpcno sensitive capabilitygame_screenshotno sensitive capabilitygame_scriptno sensitive capabilitygame_scrollno sensitive capabilitygame_serialize_stateno sensitive capabilitygame_set_camerano sensitive capabilitygame_set_particlesno sensitive capabilitygame_set_propertyno sensitive capabilitygame_set_shader_paramno sensitive capabilitygame_shape_2dno sensitive capabilitygame_skeleton_ikno sensitive capabilitygame_skyno sensitive capabilitygame_terrainno sensitive capabilitygame_tilemapno sensitive capabilitygame_time_scaleno sensitive capabilitygame_touchno sensitive capabilitygame_tween_propertyno sensitive capabilitygame_ui_controlno sensitive capabilitygame_ui_item_listno sensitive capabilitygame_ui_menuno sensitive capabilitygame_ui_popupno sensitive capabilitygame_ui_rangeno sensitive capabilitygame_ui_tabsno sensitive capabilitygame_ui_textno sensitive capabilitygame_ui_themeno sensitive capabilitygame_ui_treeno sensitive capabilitygame_videono sensitive capabilitygame_viewportno sensitive capabilitygame_visual_shaderno sensitive capabilitygame_waitno sensitive capabilitygame_windowno sensitive capabilitygame_world_settingsno sensitive capabilityget_debug_outputno sensitive capabilityget_godot_versionno sensitive capabilityget_project_infono sensitive capabilityget_uidno sensitive capabilitylaunch_editorno sensitive capabilitylist_project_filesno sensitive capabilitylist_projectsno sensitive capabilityload_spriteno sensitive capabilitymanage_autoloadsno sensitive capabilitymanage_ci_pipelineno sensitive capabilitymanage_docker_exportno sensitive capabilitymanage_export_presetsno sensitive capabilitymanage_input_mapno sensitive capabilitymanage_layersno sensitive capabilitymanage_pluginsno sensitive capabilitymanage_resourceno sensitive capabilitymanage_scene_signalsno sensitive capabilitymanage_scene_structureno sensitive capabilitymanage_shaderno sensitive capabilitymanage_theme_resourceno sensitive capabilitymanage_translationsno sensitive capabilitymodify_project_settingsno sensitive capabilitymodify_scene_nodeno sensitive capabilityread_sceneno sensitive capabilityremove_scene_nodeno sensitive capabilityrename_fileno sensitive capabilityrun_projectno sensitive capabilitysave_sceneno sensitive capabilityset_main_sceneno sensitive capabilitystop_projectno sensitive capabilityupdate_project_uidsno sensitive capabilityCross-tool combinations that form a data-exfiltration primitive (untrusted input → sensitive source → external sink).
Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v1.0.0 latest |
B 89/100 | 16 | 1.13.0 | 2026-09-07 |
Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.
The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.
npx mcptrustchecker scan @tugcantopaloglu/godot-mcp --online
Independent packages implementing the same tool, scanned with the same engine. Compare all 17 side by side →
MCP server that connects AI coding assistants to the Godot 4.2+ editor (scenes, nodes, scripts, ClassDB, playtests) via the companion godot-mcp-toolkit plugin.
Model Context Protocol server for Godot 4.6.2+
MCP server for Godot 4 — docs lookup and project file analysis
MCP server that gives AI assistants eyes and hands in the Godot editor: scene editing, input injection, deterministic game-time control, and live runtime state for agent-driven playtesting
MCP server for Godot integration
Interfaces with the Godot game engine, with tools for launching the editor, running projects, and capturing debug output.
Uncensored AI tools (chat, image, RE/malware analysis, JS deobfuscation, multi-step research) for Claude Desktop, Cursor, Cline, Zed, and any MCP client.
儿童故事 MCP 服务 - 提供故事列表和搜索功能
Grade any bet against thousands of play-by-play game simulations: win probability, odds, edge.
World Cup MCP server for the 2026 men's football tournament — live scores, fixtures, standings, read-only prediction-market signals, and paste-ready match cards. Works with Claude Code, Cursor, Codex, Windsurf, Zed. Not affiliated with FIFA or Anthropic.
MCP server exposing a live Dwarf Fortress fort to an AI agent as curated, semantic tools
MCP Server for Arknights: Endfield (TypeScript / stdio + Streamable HTTP)