MCP Apps

Security checks across static analysis, malware telemetry, and agentic risk

Overview

The plugin mostly matches its stated MCP Apps purpose, but it exposes a broad gateway for running registered tools and its visibility role appears to be caller-supplied, so access controls need review.

Install only if you need MCP-App UI and gateway support. Limit gateway/operator.write access, treat registered tools and UI resources as trusted code/content, and configure any file-backed resources to narrow, non-sensitive directories.

Static analysis

No static analysis findings were reported for this release.

VirusTotal

VirusTotal engine telemetry is currently stale for this artifact.

View on VirusTotal

Risk analysis

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

#
ASI02: Tool Misuse and Exploitation
Medium
What this means

A client or agent with access to this method could cause registered MCP-App tools to run, including tools that may have side effects.

Why it was flagged

The gateway handler executes a registered tool chosen by request parameters with caller-provided arguments. This is core to the plugin, but it is a broad execution surface without per-tool confirmation or argument enforcement in this layer.

Skill content
const toolName = params.name as string; ... const toolArgs = (params.arguments ?? {}) as Record<string, unknown>; ... const result = await tool.execute(toolCallId, toolArgs);
Recommendation

Use this only in environments where gateway write access is tightly restricted, and require registered tools to validate arguments and request confirmation for high-impact actions.

#
ASI07: Insecure Inter-Agent Communication
Medium
What this means

If users rely on MCP App visibility as a security boundary, a caller may be able to claim or omit a role in ways the artifacts do not clearly constrain.

Why it was flagged

The handler receives client context but uses the request's callerRole parameter for visibility decisions. The artifacts do not show that this role is derived from or checked against the authenticated client.

Skill content
type GatewayMethodOpts = { params: Record<string, unknown>; ... client: { connect?: { scopes?: string[] } } | null; }; ... const callerRole = params.callerRole as "model" | "app" | undefined;
Recommendation

Bind callerRole to authenticated gateway/client identity, or document that visibility is only a UI hint and must not be used to protect sensitive tools.

#
ASI03: Identity and Privilege Abuse
Low
What this means

Users should understand that installing the plugin adds privileged gateway surfaces, especially the write-scoped tool-call method.

Why it was flagged

The plugin uses gateway authentication and operator scopes. That is expected for this kind of gateway plugin, but it means authorized clients receive delegated ability to list/read resources and call registered tools.

Skill content
api.registerGatewayMethod("mcp-apps.tools.call", ... { scope: "operator.write" }); ... api.registerHttpRoute({ path: "/api/mcp-apps", ... auth: "gateway" });
Recommendation

Review which clients can obtain operator.read and operator.write access before enabling the plugin.

#
ASI07: Insecure Inter-Agent Communication
Low
What this means

A broadly configured registering tool could expose local file contents as UI resources through the gateway.

Why it was flagged

The resource registry can serve file-backed HTML resources selected by other registering tools. The code includes traversal and size checks, but the data boundary depends on the rootDir and relativePath supplied by those tools.

Skill content
registerFile(params: { uri: string; name: string; rootDir: string; relativePath: string; ... }) ... const buf = await fs.readFile(candidate);
Recommendation

Only allow trusted plugins to register file-backed resources, and keep resource roots narrow and dedicated to UI assets.