Sbox — the complete, unedited output of the deterministic mcptrustchecker engine v1.13.0, scanned . Every finding, capability tag and score component below is exactly what the engine produced — no AI, no post-processing.
{
"tool": {
"name": "mcptrustchecker",
"version": "1.13.0",
"methodologyVersion": "mcptrustchecker-1.13"
},
"target": {
"id": "sbox-mcp-server",
"source": {
"kind": "package",
"origin": "sbox-mcp-server"
},
"server": {
"name": "sbox-mcp-server"
}
},
"grade": "A",
"score": {
"score": 93,
"threatScore": 100,
"grade": "A",
"band": "A",
"categorySubtotals": {
"injection": 0,
"exfiltration": 0,
"permissions": 0,
"supply-chain": 0,
"network": 0,
"hygiene": 0
},
"vector": [
{
"kind": "client",
"term": "capability-exposure",
"level": "high",
"label": "capability blast radius (high) — client exposure if the model is manipulated",
"appliedPenalty": 6
},
{
"kind": "client",
"term": "verification-discount",
"level": "repo",
"label": "publisher verification (public source) — no provenance, but the source is public and inspectable",
"appliedPenalty": 1
},
{
"kind": "client",
"term": "coverage-honesty",
"level": "source",
"label": "inspection depth (source) — how much of the target the scan could see",
"appliedPenalty": 0
}
],
"gatesFired": [],
"methodologyVersion": "mcptrustchecker-1.13"
},
"capability": {
"level": "high",
"reasons": [
"reads sensitive or local data",
"has a read → egress path (a data-exfiltration surface)",
"can execute shell commands or code"
],
"tags": [
"code-exec",
"sensitive-source"
]
},
"coverage": {
"level": "source",
"inputs": {
"toolSurface": true,
"implementationSource": true,
"packageMetadata": true,
"liveTransport": false
},
"caveats": [
"Tools were statically extracted from the published source (200 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command \"npx -y <package>\"."
]
},
"findings": [
{
"ruleId": "MTC-FLOW-004",
"title": "Sensitive-source and external-sink co-exist",
"category": "exfiltration",
"severity": "high",
"confidence": "strong",
"description": "Tools that read sensitive data ([get_prefab_info]) and tools that can send data out ([spawn_model, spawn_citizen, network_spawn]) are exposed together. An agent can move private data to the sink.",
"remediation": "Keep secret-reading and egress capabilities on separate, separately-approved servers.",
"location": {
"kind": "flow",
"name": "get_prefab_info → spawn_model"
},
"evidence": "sources [get_prefab_info] → sinks [spawn_model, spawn_citizen, network_spawn]",
"owasp": "LLM02:2025 Sensitive Information Disclosure",
"references": [],
"data": {
"sources": [
"get_prefab_info"
],
"sinks": [
"spawn_model",
"spawn_citizen",
"network_spawn"
]
}
},
{
"ruleId": "MTC-CAP-001",
"title": "Tool \"spawn_model\" exposes command/code execution",
"category": "permissions",
"severity": "high",
"confidence": "strong",
"description": "Tool \"spawn_model\" 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.",
"remediation": "Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.",
"location": {
"kind": "tool",
"name": "spawn_model"
},
"owasp": "LLM05:2025 Improper Output Handling",
"data": {
"tags": [
"code-exec"
]
}
},
{
"ruleId": "MTC-CAP-001",
"title": "Tool \"spawn_citizen\" exposes command/code execution",
"category": "permissions",
"severity": "high",
"confidence": "strong",
"description": "Tool \"spawn_citizen\" 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.",
"remediation": "Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.",
"location": {
"kind": "tool",
"name": "spawn_citizen"
},
"owasp": "LLM05:2025 Improper Output Handling",
"data": {
"tags": [
"code-exec"
]
}
},
{
"ruleId": "MTC-CAP-001",
"title": "Tool \"network_spawn\" exposes command/code execution",
"category": "permissions",
"severity": "high",
"confidence": "strong",
"description": "Tool \"network_spawn\" 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.",
"remediation": "Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.",
"location": {
"kind": "tool",
"name": "network_spawn"
},
"owasp": "LLM05:2025 Improper Output Handling",
"data": {
"tags": [
"code-exec"
]
}
},
{
"ruleId": "MTC-SRC-002",
"title": "Shell/command execution in server code (dist/tools/roundui.js)",
"category": "permissions",
"severity": "high",
"confidence": "strong",
"description": "In the server's implementation (`dist/tools/roundui.js:67`): 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.",
"remediation": "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": {
"kind": "server",
"name": "dist/tools/roundui.js"
},
"evidence": "e vote automatically on spawn (host only). Usually false — call StartVote() from your round machine's post-round state i",
"owasp": "LLM05:2025 Improper Output Handling",
"data": {
"rule": "MTC-SRC-002",
"file": "dist/tools/roundui.js",
"line": 67,
"nonRuntime": false
}
},
{
"ruleId": "MTC-CAP-005",
"title": "Mutating tool \"spawn_model\" declares no destructiveHint",
"category": "hygiene",
"severity": "low",
"confidence": "heuristic",
"description": "Tool \"spawn_model\" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.",
"remediation": "Declare accurate annotations, and gate destructive tools on user confirmation regardless.",
"location": {
"kind": "tool",
"name": "spawn_model"
},
"data": {
"tags": [
"code-exec"
]
}
},
{
"ruleId": "MTC-CAP-005",
"title": "Mutating tool \"spawn_citizen\" declares no destructiveHint",
"category": "hygiene",
"severity": "low",
"confidence": "heuristic",
"description": "Tool \"spawn_citizen\" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.",
"remediation": "Declare accurate annotations, and gate destructive tools on user confirmation regardless.",
"location": {
"kind": "tool",
"name": "spawn_citizen"
},
"data": {
"tags": [
"code-exec"
]
}
},
{
"ruleId": "MTC-CAP-005",
"title": "Mutating tool \"network_spawn\" declares no destructiveHint",
"category": "hygiene",
"severity": "low",
"confidence": "heuristic",
"description": "Tool \"network_spawn\" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.",
"remediation": "Declare accurate annotations, and gate destructive tools on user confirmation regardless.",
"location": {
"kind": "tool",
"name": "network_spawn"
},
"data": {
"tags": [
"code-exec"
]
}
}
],
"toxicFlows": [
{
"id": "flow-1",
"severity": "high",
"confidence": "strong",
"untrustedInput": [],
"sensitiveSource": [
"get_prefab_info"
],
"externalSink": [
"spawn_model",
"spawn_citizen",
"network_spawn"
],
"selfContained": false,
"path": [
"get_prefab_info",
"network_spawn"
],
"pathWired": false,
"description": "A sensitive-source → external-sink chain exists: get_prefab_info → network_spawn."
}
],
"capabilities": [
{
"tool": "create_needs_system",
"tags": [],
"reasons": {}
},
{
"tool": "create_utility_ai",
"tags": [],
"reasons": {}
},
{
"tool": "create_npc_schedule_brain",
"tags": [],
"reasons": {}
},
{
"tool": "create_event_bus",
"tags": [],
"reasons": {}
},
{
"tool": "add_tts_voice",
"tags": [],
"reasons": {}
},
{
"tool": "search_assets",
"tags": [],
"reasons": {}
},
{
"tool": "list_asset_library",
"tags": [],
"reasons": {}
},
{
"tool": "install_asset",
"tags": [],
"reasons": {}
},
{
"tool": "get_asset_info",
"tags": [],
"reasons": {}
},
{
"tool": "inspect_model_geometry",
"tags": [],
"reasons": {}
},
{
"tool": "copy_asset_with_dependencies",
"tags": [],
"reasons": {}
},
{
"tool": "list_sounds",
"tags": [],
"reasons": {}
},
{
"tool": "create_sound_event",
"tags": [],
"reasons": {}
},
{
"tool": "assign_sound",
"tags": [],
"reasons": {}
},
{
"tool": "play_sound_preview",
"tags": [],
"reasons": {}
},
{
"tool": "find_broken_references",
"tags": [],
"reasons": {}
},
{
"tool": "batch_set_property",
"tags": [],
"reasons": {}
},
{
"tool": "describe_project",
"tags": [],
"reasons": {}
},
{
"tool": "batch_delete",
"tags": [],
"reasons": {}
},
{
"tool": "batch_add_component",
"tags": [],
"reasons": {}
},
{
"tool": "batch_reparent",
"tags": [],
"reasons": {}
},
{
"tool": "save_camera_bookmark",
"tags": [],
"reasons": {}
},
{
"tool": "list_camera_bookmarks",
"tags": [],
"reasons": {}
},
{
"tool": "delete_camera_bookmark",
"tags": [],
"reasons": {}
},
{
"tool": "capture_camera_set",
"tags": [],
"reasons": {}
},
{
"tool": "capture_topdown",
"tags": [],
"reasons": {}
},
{
"tool": "spawn_model",
"tags": [
"code-exec"
],
"reasons": {
"code-exec": [
"keyword \"spawn\" in tool name"
]
}
},
{
"tool": "spawn_citizen",
"tags": [
"code-exec"
],
"reasons": {
"code-exec": [
"keyword \"spawn\" in tool name"
]
}
},
{
"tool": "dress_citizen",
"tags": [],
"reasons": {}
},
{
"tool": "set_bodygroup",
"tags": [],
"reasons": {}
},
{
"tool": "pose_citizen",
"tags": [],
"reasons": {}
},
{
"tool": "equip_model",
"tags": [],
"reasons": {}
},
{
"tool": "set_look_at",
"tags": [],
"reasons": {}
},
{
"tool": "add_ragdoll",
"tags": [],
"reasons": {}
},
{
"tool": "set_expression",
"tags": [],
"reasons": {}
},
{
"tool": "list_animations",
"tags": [],
"reasons": {}
},
{
"tool": "play_animation",
"tags": [],
"reasons": {}
},
{
"tool": "set_animgraph_param",
"tags": [],
"reasons": {}
},
{
"tool": "add_lipsync",
"tags": [],
"reasons": {}
},
{
"tool": "record_playtest",
"tags": [],
"reasons": {}
},
{
"tool": "create_killcam",
"tags": [],
"reasons": {}
},
{
"tool": "create_cutscene_director",
"tags": [],
"reasons": {}
},
{
"tool": "create_dialogue_system",
"tags": [],
"reasons": {}
},
{
"tool": "get_property",
"tags": [],
"reasons": {}
},
{
"tool": "get_all_properties",
"tags": [],
"reasons": {}
},
{
"tool": "list_available_components",
"tags": [],
"reasons": {}
},
{
"tool": "add_component_with_properties",
"tags": [],
"reasons": {}
},
{
"tool": "invoke_method",
"tags": [],
"reasons": {}
},
{
"tool": "debug_draw_line",
"tags": [],
"reasons": {}
},
{
"tool": "debug_draw_ray",
"tags": [],
"reasons": {}
},
{
"tool": "debug_draw_box",
"tags": [],
"reasons": {}
},
{
"tool": "debug_draw_sphere",
"tags": [],
"reasons": {}
},
{
"tool": "debug_clear",
"tags": [],
"reasons": {}
},
{
"tool": "set_time_scale",
"tags": [],
"reasons": {}
},
{
"tool": "get_profiler_stats",
"tags": [],
"reasons": {}
},
{
"tool": "read_log",
"tags": [],
"reasons": {}
},
{
"tool": "get_compile_errors",
"tags": [],
"reasons": {}
},
{
"tool": "frame_camera",
"tags": [],
"reasons": {}
},
{
"tool": "screenshot_from",
"tags": [],
"reasons": {}
},
{
"tool": "console_run",
"tags": [],
"reasons": {}
},
{
"tool": "execute_csharp",
"tags": [],
"reasons": {}
},
{
"tool": "get_bounds",
"tags": [],
"reasons": {}
},
{
"tool": "find_objects_near",
"tags": [],
"reasons": {}
},
{
"tool": "screenshot_orbit",
"tags": [],
"reasons": {}
},
{
"tool": "capture_view",
"tags": [],
"reasons": {}
},
{
"tool": "generate_lipsync_dialogue",
"tags": [],
"reasons": {}
},
{
"tool": "create_camera_effects",
"tags": [],
"reasons": {}
},
{
"tool": "create_event_director",
"tags": [],
"reasons": {}
},
{
"tool": "describe_type",
"tags": [],
"reasons": {}
},
{
"tool": "list_libraries",
"tags": [],
"reasons": {}
},
{
"tool": "search_types",
"tags": [],
"reasons": {}
},
{
"tool": "get_method_signature",
"tags": [],
"reasons": {}
},
{
"tool": "find_in_project",
"tags": [],
"reasons": {}
},
{
"tool": "search_docs",
"tags": [],
"reasons": {}
},
{
"tool": "get_doc_page",
"tags": [],
"reasons": {}
},
{
"tool": "list_doc_categories",
"tags": [],
"reasons": {}
},
{
"tool": "create_currency_account",
"tags": [],
"reasons": {}
},
{
"tool": "create_idle_economy",
"tags": [],
"reasons": {}
},
{
"tool": "create_signed_save",
"tags": [],
"reasons": {}
},
{
"tool": "create_meta_progression",
"tags": [],
"reasons": {}
},
{
"tool": "add_steam_stat_currency",
"tags": [],
"reasons": {}
},
{
"tool": "create_loot_table_resource",
"tags": [],
"reasons": {}
},
{
"tool": "create_camera_shake",
"tags": [],
"reasons": {}
},
{
"tool": "add_flicker_light",
"tags": [],
"reasons": {}
},
{
"tool": "create_floating_combat_text",
"tags": [],
"reasons": {}
},
{
"tool": "create_gameobject",
"tags": [],
"reasons": {}
},
{
"tool": "delete_gameobject",
"tags": [],
"reasons": {}
},
{
"tool": "duplicate_gameobject",
"tags": [],
"reasons": {}
},
{
"tool": "rename_gameobject",
"tags": [],
"reasons": {}
},
{
"tool": "set_parent",
"tags": [],
"reasons": {}
},
{
"tool": "set_enabled",
"tags": [],
"reasons": {}
},
{
"tool": "set_transform",
"tags": [],
"reasons": {}
},
{
"tool": "get_scene_hierarchy",
"tags": [],
"reasons": {}
},
{
"tool": "get_selected_objects",
"tags": [],
"reasons": {}
},
{
"tool": "select_object",
"tags": [],
"reasons": {}
},
{
"tool": "focus_object",
"tags": [],
"reasons": {}
},
{
"tool": "set_component_reference",
"tags": [],
"reasons": {}
},
{
"tool": "add_component_to_new_object",
"tags": [],
"reasons": {}
},
{
"tool": "create_objective_system",
"tags": [],
"reasons": {}
},
{
"tool": "create_health_system",
"tags": [],
"reasons": {}
},
{
"tool": "create_economy_wallet",
"tags": [],
"reasons": {}
},
{
"tool": "create_round_phase_machine",
"tags": [],
"reasons": {}
},
{
"tool": "create_day_night_clock",
"tags": [],
"reasons": {}
},
{
"tool": "create_interactable",
"tags": [],
"reasons": {}
},
{
"tool": "create_weighted_loot_table",
"tags": [],
"reasons": {}
},
{
"tool": "create_pickup",
"tags": [],
"reasons": {}
},
{
"tool": "create_save_system",
"tags": [],
"reasons": {}
},
{
"tool": "create_leaderboard_panel",
"tags": [],
"reasons": {}
},
{
"tool": "create_inventory",
"tags": [],
"reasons": {}
},
{
"tool": "create_stat_modifier_system",
"tags": [],
"reasons": {}
},
{
"tool": "create_placement_mode",
"tags": [],
"reasons": {}
},
{
"tool": "record_gameplay_clip",
"tags": [],
"reasons": {}
},
{
"tool": "stop_gameplay_recording",
"tags": [],
"reasons": {}
},
{
"tool": "gameplay_recording_status",
"tags": [],
"reasons": {}
},
{
"tool": "ensure_input_action",
"tags": [],
"reasons": {}
},
{
"tool": "inspect_networked_object",
"tags": [],
"reasons": {}
},
{
"tool": "networking_lint",
"tags": [],
"reasons": {}
},
{
"tool": "sandbox_lint",
"tags": [],
"reasons": {}
},
{
"tool": "razor_lint",
"tags": [],
"reasons": {}
},
{
"tool": "scene_validate",
"tags": [],
"reasons": {}
},
{
"tool": "save_inspect",
"tags": [],
"reasons": {}
},
{
"tool": "services_query",
"tags": [],
"reasons": {}
},
{
"tool": "simulate_input",
"tags": [],
"reasons": {}
},
{
"tool": "add_interaction_prompt",
"tags": [],
"reasons": {}
},
{
"tool": "create_hold_to_confirm",
"tags": [],
"reasons": {}
},
{
"tool": "create_carry_system",
"tags": [],
"reasons": {}
},
{
"tool": "snap_to_ground",
"tags": [],
"reasons": {}
},
{
"tool": "align_objects",
"tags": [],
"reasons": {}
},
{
"tool": "distribute_objects",
"tags": [],
"reasons": {}
},
{
"tool": "grid_duplicate",
"tags": [],
"reasons": {}
},
{
"tool": "commit_placement_plan",
"tags": [],
"reasons": {}
},
{
"tool": "measure_distance",
"tags": [],
"reasons": {}
},
{
"tool": "scatter_props",
"tags": [],
"reasons": {}
},
{
"tool": "randomize_transforms",
"tags": [],
"reasons": {}
},
{
"tool": "group_objects",
"tags": [],
"reasons": {}
},
{
"tool": "create_gacha_drop_table",
"tags": [],
"reasons": {}
},
{
"tool": "create_currency_pickup",
"tags": [],
"reasons": {}
},
{
"tool": "create_offline_progress",
"tags": [],
"reasons": {}
},
{
"tool": "assign_model",
"tags": [],
"reasons": {}
},
{
"tool": "create_material",
"tags": [],
"reasons": {}
},
{
"tool": "assign_material",
"tags": [],
"reasons": {}
},
{
"tool": "set_material_property",
"tags": [],
"reasons": {}
},
{
"tool": "author_movie_clip",
"tags": [],
"reasons": {}
},
{
"tool": "list_movies",
"tags": [],
"reasons": {}
},
{
"tool": "add_movie_player",
"tags": [],
"reasons": {}
},
{
"tool": "play_movie",
"tags": [],
"reasons": {}
},
{
"tool": "stop_movie",
"tags": [],
"reasons": {}
},
{
"tool": "bake_navmesh",
"tags": [],
"reasons": {}
},
{
"tool": "get_navmesh_path",
"tags": [],
"reasons": {}
},
{
"tool": "create_host_rpc_action",
"tags": [],
"reasons": {}
},
{
"tool": "add_targeted_rpc",
"tags": [],
"reasons": {}
},
{
"tool": "create_local_player_resolver",
"tags": [],
"reasons": {}
},
{
"tool": "add_host_migration_recovery",
"tags": [],
"reasons": {}
},
{
"tool": "add_network_helper",
"tags": [],
"reasons": {}
},
{
"tool": "configure_network",
"tags": [],
"reasons": {}
},
{
"tool": "get_network_status",
"tags": [],
"reasons": {}
},
{
"tool": "network_spawn",
"tags": [
"code-exec"
],
"reasons": {
"code-exec": [
"keyword \"spawn\" in tool name"
]
}
},
{
"tool": "set_ownership",
"tags": [],
"reasons": {}
},
{
"tool": "add_sync_property",
"tags": [],
"reasons": {}
},
{
"tool": "add_rpc_method",
"tags": [],
"reasons": {}
},
{
"tool": "create_networked_player",
"tags": [],
"reasons": {}
},
{
"tool": "create_lobby_manager",
"tags": [],
"reasons": {}
},
{
"tool": "create_network_events",
"tags": [],
"reasons": {}
},
{
"tool": "start_multiplayer_test",
"tags": [],
"reasons": {}
},
{
"tool": "multiplayer_test_status",
"tags": [],
"reasons": {}
},
{
"tool": "stop_multiplayer_test",
"tags": [],
"reasons": {}
},
{
"tool": "create_npc_brain",
"tags": [],
"reasons": {}
},
{
"tool": "place_patrol_route",
"tags": [],
"reasons": {}
},
{
"tool": "assign_patrol_route",
"tags": [],
"reasons": {}
},
{
"tool": "create_npc_spawner",
"tags": [],
"reasons": {}
},
{
"tool": "simulate_npc_perception",
"tags": [],
"reasons": {}
},
{
"tool": "find_objects",
"tags": [],
"reasons": {}
},
{
"tool": "set_tint",
"tags": [],
"reasons": {}
},
{
"tool": "replace_model",
"tags": [],
"reasons": {}
},
{
"tool": "set_tags",
"tags": [],
"reasons": {}
},
{
"tool": "remove_component",
"tags": [],
"reasons": {}
},
{
"tool": "get_tags",
"tags": [],
"reasons": {}
},
{
"tool": "add_physics",
"tags": [],
"reasons": {}
},
{
"tool": "add_collider",
"tags": [],
"reasons": {}
},
{
"tool": "add_joint",
"tags": [],
"reasons": {}
},
{
"tool": "raycast",
"tags": [],
"reasons": {}
},
{
"tool": "physics_overlap",
"tags": [],
"reasons": {}
},
{
"tool": "start_play",
"tags": [],
"reasons": {}
},
{
"tool": "stop_play",
"tags": [],
"reasons": {}
},
{
"tool": "is_playing",
"tags": [],
"reasons": {}
},
{
"tool": "take_screenshot",
"tags": [],
"reasons": {}
},
{
"tool": "undo",
"tags": [],
"reasons": {}
},
{
"tool": "redo",
"tags": [],
"reasons": {}
},
{
"tool": "set_property",
"tags": [],
"reasons": {}
},
{
"tool": "get_runtime_property",
"tags": [],
"reasons": {}
},
{
"tool": "set_runtime_property",
"tags": [],
"reasons": {}
},
{
"tool": "drive_player",
"tags": [],
"reasons": {}
},
{
"tool": "drive_player_status",
"tags": [],
"reasons": {}
},
{
"tool": "playtest",
"tags": [],
"reasons": {}
},
{
"tool": "playtest_status",
"tags": [],
"reasons": {}
},
{
"tool": "playtest_abort",
"tags": [],
"reasons": {}
},
{
"tool": "create_prefab",
"tags": [],
"reasons": {}
},
{
"tool": "instantiate_prefab",
"tags": [],
"reasons": {}
},
{
"tool": "list_prefabs",
"tags": [],
"reasons": {}
},
{
"tool": "get_prefab_info",
"tags": [
"sensitive-source"
],
"reasons": {
"sensitive-source": [
"keyword \"read_file\""
]
}
}
],
"surfaceDigest": "ae42883eb0358a33353767bc0ec709a680bf4093c35b987d69a84a504042d1e3",
"stats": {
"tools": 200,
"prompts": 0,
"resources": 0,
"findingsBySeverity": {
"critical": 0,
"high": 5,
"medium": 0,
"low": 3,
"info": 0
}
}
}