{"data":{"skill":{"slug":"mcp-use-chatgpt-app-builder","name":"chatgpt-app-builder","icon":"📦","repo":"https://github.com/mcp-use/mcp-use/tree/main/skills/chatgpt-app-builder/","status":"approved","author":"mcp-use","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"f41e9b58-d9b7-47f5-a2a7-443917ad6c07","skill_id":"b3556e87-7e19-4daf-a9c6-8a3f3c045470","version":5,"content_hash":"v2:0519034dad657fb1f7706e0550e962beeda73fdf:20806b31b8e480608d04888150a7c014c44963f831228be2660f6b1e3a8f32f7:40afd8237a962a06e7743c740ff5e399b26fd59c4a4c6485f1c04ce6e0685afa:0d7fe891de621fda727e9fd526c39d49","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Most static detections are false positives from Markdown examples, template literals, placeholder URLs, UI guidance, and non-secret environment variable examples. One medium issue is confirmed: the deprecated skill front matter includes an executable npx install command for a replacement skill, which could trigger external installation in untrusted contexts. No prompt injection, credential exfiltration, or malicious intent was found.","remediation":[{"issue":"Deprecated skill front matter includes an external install command.","severity":"medium","suggestion":"Replace the executable command with a neutral migration note and require explicit user confirmation before any replacement skill is installed."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"references/architecture.md","line_end":110,"line_start":95},{"file":"references/architecture.md","line_end":135,"line_start":133},{"file":"references/components-api.md","line_end":101,"line_start":96},{"file":"references/server-and-widgets.md","line_end":61,"line_start":57},{"file":"references/state-and-context.md","line_end":242,"line_start":234},{"file":"references/widget-patterns.md","line_end":204,"line_start":202},{"file":"references/widget-patterns.md","line_end":214,"line_start":204},{"file":"SKILL.md","line_end":4,"line_start":4},{"file":"SKILL.md","line_end":5,"line_start":5},{"file":"SKILL.md","line_end":6,"line_start":6},{"file":"SKILL.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":55,"line_start":40}]},{"factor":"network","evidence":[{"file":"references/components-api.md","line_end":281,"line_start":281},{"file":"references/csp-and-metadata.md","line_end":22,"line_start":22},{"file":"references/csp-and-metadata.md","line_end":23,"line_start":23},{"file":"references/csp-and-metadata.md","line_end":26,"line_start":26},{"file":"references/csp-and-metadata.md","line_end":29,"line_start":29},{"file":"references/csp-and-metadata.md","line_end":65,"line_start":65},{"file":"references/csp-and-metadata.md","line_end":66,"line_start":66},{"file":"references/csp-and-metadata.md","line_end":87,"line_start":87},{"file":"references/csp-and-metadata.md","line_end":88,"line_start":88},{"file":"references/csp-and-metadata.md","line_end":119,"line_start":119},{"file":"references/csp-and-metadata.md","line_end":120,"line_start":120},{"file":"references/csp-and-metadata.md","line_end":123,"line_start":123},{"file":"references/csp-and-metadata.md","line_end":154,"line_start":154},{"file":"references/server-and-widgets.md","line_end":29,"line_start":29}]},{"factor":"env_access","evidence":[{"file":"references/server-and-widgets.md","line_end":29,"line_start":29},{"file":"references/server-and-widgets.md","line_end":29,"line_start":29}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":6,"line_start":6}],"confidence":0.88,"description":"`npx skills install mcp-use/mcp-use --skill mcp-app-builder`","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This line contains an executable npx command in the skill front matter that instructs installation of another skill. In an untrusted marketplace skill, that can trigger external code retrieval or supply-chain exposure if followed automatically."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":18,"total_lines":2127,"audit_model":"codex","audited_at":"2026-07-09T11:45:02.911+00:00","created_at":"2026-07-09T13:32:29.330074+00:00","static_findings":[{"id":"blocker:evals/discover.json:19:system-reconnaissance","file":"evals/discover.json","pattern":"System reconnaissance","snippet":"\"query\": \"I want to show a grid of 20 real-time KPIs.\",","category":"blocker","line_end":19,"severity":"low","line_start":19},{"id":"blocker:evals/ui-guidelines.json:23:system-reconnaissance","file":"evals/ui-guidelines.json","pattern":"System reconnaissance","snippet":"\"query\": \"My complex grid doesn't work on phones.\",","category":"blocker","line_end":23,"severity":"low","line_start":23},{"id":"blocker:evals/widgets.json:12:system-reconnaissance","file":"evals/widgets.json","pattern":"System reconnaissance","snippet":"\"expected_behavior\": \"Uses callTool from useWidget(). Shows async onClick: await callTool('book-item","category":"blocker","line_end":12,"severity":"low","line_start":12},{"id":"external_commands:references/architecture.md:95:ruby-shell-backtick-execution","file":"references/architecture.md","pattern":"Ruby/shell backtick execution","snippet":"output: text(`Found ${flights.length} flights to ${destination}`),","category":"external_commands","line_end":110,"severity":"medium","line_start":95},{"id":"external_commands:references/architecture.md:133:ruby-shell-backtick-execution","file":"references/architecture.md","pattern":"Ruby/shell backtick execution","snippet":"return text(`Booking ${bookingId} has been cancelled.`);","category":"external_commands","line_end":135,"severity":"medium","line_start":133},{"id":"external_commands:references/components-api.md:96:ruby-shell-backtick-execution","file":"references/components-api.md","pattern":"Ruby/shell backtick execution","snippet":"<div style={{ backgroundImage: `url(${bannerUrl})` }}>","category":"external_commands","line_end":101,"severity":"medium","line_start":96},{"id":"network:references/components-api.md:281:hardcoded-url","file":"references/components-api.md","pattern":"Hardcoded URL","snippet":"<button onClick={() => openExternal(\"https://checkout.example.com/order/123\")}>","category":"network","line_end":281,"severity":"low","line_start":281},{"id":"blocker:references/components-api.md:130:system-reconnaissance","file":"references/components-api.md","pattern":"System reconnaissance","snippet":"| `onError` | (error, errorInfo) => void | Callback when error is caught |","category":"blocker","line_end":130,"severity":"low","line_start":130},{"id":"blocker:references/components-api.md:212:system-reconnaissance","file":"references/components-api.md","pattern":"System reconnaissance","snippet":"| `openExternal` | (href) => void | Open external URL |","category":"blocker","line_end":212,"severity":"low","line_start":212},{"id":"network:references/csp-and-metadata.md:22:xmlhttprequest","file":"references/csp-and-metadata.md","pattern":"XMLHttpRequest","snippet":"// APIs your widget needs to call (fetch, WebSocket, XMLHttpRequest)","category":"network","line_end":22,"severity":"low","line_start":22},{"id":"network:references/csp-and-metadata.md:23:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"connectDomains: [\"https://api.weather.com\", \"https://backup-api.weather.com\"],","category":"network","line_end":23,"severity":"low","line_start":23},{"id":"network:references/csp-and-metadata.md:26:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"resourceDomains: [\"https://cdn.weather.com\"],","category":"network","line_end":26,"severity":"low","line_start":26},{"id":"network:references/csp-and-metadata.md:29:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"frameDomains: [\"https://embed.weather.com\"],","category":"network","line_end":29,"severity":"low","line_start":29},{"id":"network:references/csp-and-metadata.md:65:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"connectDomains: ['https://api.example.com'], // Add missing API","category":"network","line_end":65,"severity":"low","line_start":65},{"id":"network:references/csp-and-metadata.md:66:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"resourceDomains: ['https://cdn.example.com'], // Add missing CDN","category":"network","line_end":66,"severity":"low","line_start":66},{"id":"network:references/csp-and-metadata.md:87:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"connectDomains: [\"https://api.weather.com\"],","category":"network","line_end":87,"severity":"low","line_start":87},{"id":"network:references/csp-and-metadata.md:88:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"resourceDomains: [\"https://cdn.weather.com\"],","category":"network","line_end":88,"severity":"low","line_start":88},{"id":"network:references/csp-and-metadata.md:119:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"connect_domains: [\"https://api.weather.com\"],","category":"network","line_end":119,"severity":"low","line_start":119},{"id":"network:references/csp-and-metadata.md:120:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"resource_domains: [\"https://cdn.weather.com\"],","category":"network","line_end":120,"severity":"low","line_start":120},{"id":"network:references/csp-and-metadata.md:123:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"\"openai/widgetDomain\": \"https://chatgpt.com\",","category":"network","line_end":123,"severity":"low","line_start":123},{"id":"network:references/csp-and-metadata.md:154:hardcoded-url","file":"references/csp-and-metadata.md","pattern":"Hardcoded URL","snippet":"csp: { connectDomains: [\"https://api.weather.com\"] },","category":"network","line_end":154,"severity":"low","line_start":154},{"id":"blocker:references/csp-and-metadata.md:50:system-reconnaissance","file":"references/csp-and-metadata.md","pattern":"System reconnaissance","snippet":"2. **Avoid wildcards**: `https://*.weather.com` is less secure","category":"blocker","line_end":50,"severity":"low","line_start":50},{"id":"blocker:references/csp-and-metadata.md:70:system-reconnaissance","file":"references/csp-and-metadata.md","pattern":"System reconnaissance","snippet":"3. Use exact domains - avoid wildcards in production","category":"blocker","line_end":70,"severity":"low","line_start":70},{"id":"external_commands:references/server-and-widgets.md:57:ruby-shell-backtick-execution","file":"references/server-and-widgets.md","pattern":"Ruby/shell backtick execution","snippet":"output: text(`Found ${restaurants.length} ${cuisine} restaurants near ${location}`),","category":"external_commands","line_end":61,"severity":"medium","line_start":57},{"id":"network:references/server-and-widgets.md:29:hardcoded-url","file":"references/server-and-widgets.md","pattern":"Hardcoded URL","snippet":"baseUrl: process.env.MCP_URL || \"http://localhost:3000\",","category":"network","line_end":29,"severity":"low","line_start":29},{"id":"env_access:references/server-and-widgets.md:29:environment-variable-access-dot-notation","file":"references/server-and-widgets.md","pattern":"Environment variable access (dot notation)","snippet":"baseUrl: process.env.MCP_URL || \"http://localhost:3000\",","category":"env_access","line_end":29,"severity":"low","line_start":29},{"id":"env_access:references/server-and-widgets.md:29:environment-variable-object","file":"references/server-and-widgets.md","pattern":"Environment variable object","snippet":"baseUrl: process.env.MCP_URL || \"http://localhost:3000\",","category":"env_access","line_end":29,"severity":"low","line_start":29},{"id":"sensitive:references/server-and-widgets.md:29:environment-file-access","file":"references/server-and-widgets.md","pattern":"Environment file access","snippet":"baseUrl: process.env.MCP_URL || \"http://localhost:3000\",","category":"sensitive","line_end":29,"severity":"high","line_start":29},{"id":"blocker:references/server-and-widgets.md:134:system-reconnaissance","file":"references/server-and-widgets.md","pattern":"System reconnaissance","snippet":"padding: 12, borderRadius: 8, border: \"1px solid #e5e7eb\"","category":"blocker","line_end":134,"severity":"low","line_start":134},{"id":"external_commands:references/state-and-context.md:234:ruby-shell-backtick-execution","file":"references/state-and-context.md","pattern":"Ruby/shell backtick execution","snippet":"`I have ${remaining} tasks left. Help me prioritize them.`","category":"external_commands","line_end":242,"severity":"medium","line_start":234},{"id":"blocker:references/state-and-context.md:37:system-reconnaissance","file":"references/state-and-context.md","pattern":"System reconnaissance","snippet":"t.id === id ? { ...t, completed: !t.completed } : t","category":"blocker","line_end":37,"severity":"low","line_start":37},{"id":"blocker:references/state-and-context.md:212:system-reconnaissance","file":"references/state-and-context.md","pattern":"System reconnaissance","snippet":"t.id === id ? { ...t, completed: !t.completed } : t","category":"blocker","line_end":212,"severity":"low","line_start":212},{"id":"blocker:references/ui-guidelines.md:22:system-reconnaissance","file":"references/ui-guidelines.md","pattern":"System reconnaissance","snippet":"Immersive experience for complex tasks. Host composer remains overlaid at bottom.","category":"blocker","line_end":22,"severity":"low","line_start":22},{"id":"blocker:references/ui-guidelines.md:135:system-reconnaissance","file":"references/ui-guidelines.md","pattern":"System reconnaissance","snippet":"| `safeArea` | `{ insets: { top, bottom, left, right } }` | Padding to avoid notches, composer overl","category":"blocker","line_end":135,"severity":"low","line_start":135},{"id":"external_commands:references/widget-patterns.md:202:ruby-shell-backtick-execution","file":"references/widget-patterns.md","pattern":"Ruby/shell backtick execution","snippet":"}`}","category":"external_commands","line_end":204,"severity":"medium","line_start":202},{"id":"external_commands:references/widget-patterns.md:204:ruby-shell-backtick-execution","file":"references/widget-patterns.md","pattern":"Ruby/shell backtick execution","snippet":"<h1 className={`text-xl font-bold ${isDark ? \"text-blue-400\" : \"text-blue-600\"}`}>","category":"external_commands","line_end":214,"severity":"medium","line_start":204},{"id":"blocker:references/widget-patterns.md:69:system-reconnaissance","file":"references/widget-patterns.md","pattern":"System reconnaissance","snippet":"<div className=\"grid grid-cols-3 gap-4\">","category":"blocker","line_end":69,"severity":"low","line_start":69},{"id":"blocker:references/widget-patterns.md:106:system-reconnaissance","file":"references/widget-patterns.md","pattern":"System reconnaissance","snippet":"await callTool(\"fetch-data\", { id: props.id });","category":"blocker","line_end":106,"severity":"low","line_start":106},{"id":"external_commands:SKILL.md:4:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"DEPRECATED: This skill has been replaced by `mcp-app-builder`.","category":"external_commands","line_end":4,"severity":"medium","line_start":4},{"id":"external_commands:SKILL.md:5:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Check if `mcp-app-builder` is available in the skills folder. If not, install it:","category":"external_commands","line_end":5,"severity":"medium","line_start":5},{"id":"external_commands:SKILL.md:6:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`npx skills install mcp-use/mcp-use --skill mcp-app-builder`","category":"external_commands","line_end":6,"severity":"medium","line_start":6},{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Use `mcp-app-builder` instead of this skill.","category":"external_commands","line_end":7,"severity":"medium","line_start":7},{"id":"external_commands:SKILL.md:40:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":55,"severity":"medium","line_start":40}],"finding_verdicts":[{"id":"blocker:evals/discover.json:19:system-reconnaissance","reason":"The line is an evaluation prompt about a KPI grid, not system reconnaissance. It contains no file, environment, host, or command discovery behavior.","verdict":"false_positive","confidence":0.95},{"id":"blocker:evals/ui-guidelines.json:23:system-reconnaissance","reason":"The line is a test prompt about mobile grid layout. It does not request host details or enumerate system resources.","verdict":"false_positive","confidence":0.95},{"id":"blocker:evals/widgets.json:12:system-reconnaissance","reason":"The line describes expected widget behavior for callTool usage in an eval fixture. It does not inspect system configuration or collect local information.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:references/architecture.md:95:ruby-shell-backtick-execution","reason":"The backticks are JavaScript template literal syntax inside a TypeScript documentation example. They format a text response and do not execute a shell command.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:references/architecture.md:133:ruby-shell-backtick-execution","reason":"The backticks are a TypeScript template literal used to return a booking status string. No command execution API or shell interpreter is involved.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:references/components-api.md:96:ruby-shell-backtick-execution","reason":"The backticks construct a CSS url() value in a React example. This is not Ruby or shell execution.","verdict":"false_positive","confidence":0.95},{"id":"network:references/components-api.md:281:hardcoded-url","reason":"The URL is a placeholder checkout example passed to openExternal in documentation. It is not active network code in the skill.","verdict":"false_positive","confidence":0.9},{"id":"blocker:references/components-api.md:130:system-reconnaissance","reason":"The line documents an ErrorBoundary callback parameter. It does not instruct the model to gather system details.","verdict":"false_positive","confidence":0.94},{"id":"blocker:references/components-api.md:212:system-reconnaissance","reason":"The line documents the openExternal hook capability. It is API reference text, not reconnaissance behavior.","verdict":"false_positive","confidence":0.93},{"id":"network:references/csp-and-metadata.md:22:xmlhttprequest","reason":"The line comments that CSP may allow fetch, WebSocket, or XMLHttpRequest for widgets. It does not perform a network request.","verdict":"false_positive","confidence":0.92},{"id":"network:references/csp-and-metadata.md:23:hardcoded-url","reason":"The weather domains are illustrative CSP examples. They are not contacted by the skill itself.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:26:hardcoded-url","reason":"The CDN domain is an illustrative resourceDomains example for CSP configuration. No runtime request is made by this skill.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:29:hardcoded-url","reason":"The iframe domain is a placeholder CSP example. It does not cause the skill to load external content.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:65:hardcoded-url","reason":"The api.example.com URL appears in a troubleshooting example for missing CSP domains. It is documentation-only and not active network behavior.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:66:hardcoded-url","reason":"The cdn.example.com URL appears in a CSP troubleshooting example. It is not executed or fetched by the skill.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:87:hardcoded-url","reason":"The weather API URL is a metadata example for widget CSP. It is not an outbound call from the skill.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:88:hardcoded-url","reason":"The weather CDN URL is a metadata example for widget resources. The skill does not fetch it.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:119:hardcoded-url","reason":"The connect_domains entry is part of a legacy Apps SDK metadata example. It is not active network code.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:120:hardcoded-url","reason":"The resource_domains entry is part of a legacy metadata example. No resource is loaded by this skill.","verdict":"false_positive","confidence":0.91},{"id":"network:references/csp-and-metadata.md:123:hardcoded-url","reason":"The chatgpt.com value documents the widget domain metadata field. It is not an unexpected third-party endpoint or exfiltration target.","verdict":"false_positive","confidence":0.9},{"id":"network:references/csp-and-metadata.md:154:hardcoded-url","reason":"The weather API URL is repeated in a combined metadata example. It is not contacted by the skill.","verdict":"false_positive","confidence":0.91},{"id":"blocker:references/csp-and-metadata.md:50:system-reconnaissance","reason":"The line advises avoiding wildcard CSP domains. This is defensive guidance, not system reconnaissance.","verdict":"false_positive","confidence":0.95},{"id":"blocker:references/csp-and-metadata.md:70:system-reconnaissance","reason":"The line recommends exact CSP domains in production. It reduces attack surface and does not collect host information.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:references/server-and-widgets.md:57:ruby-shell-backtick-execution","reason":"The backticks are a TypeScript template literal that formats a restaurant search response. There is no shell command execution path.","verdict":"false_positive","confidence":0.96},{"id":"network:references/server-and-widgets.md:29:hardcoded-url","reason":"The localhost URL is a fallback base URL in a documentation example. It is not an external network destination used by the skill.","verdict":"false_positive","confidence":0.87},{"id":"env_access:references/server-and-widgets.md:29:environment-variable-access-dot-notation","reason":"The process.env.MCP_URL usage appears only in a sample server constructor. It reads a non-secret base URL example and is not active skill code.","verdict":"false_positive","confidence":0.88},{"id":"env_access:references/server-and-widgets.md:29:environment-variable-object","reason":"The environment access is documentation for configuring an MCP base URL. It does not read or expose secrets.","verdict":"false_positive","confidence":0.88},{"id":"sensitive:references/server-and-widgets.md:29:environment-file-access","reason":"The snippet references process.env.MCP_URL in an example and does not access an environment file. There is no evidence of secret file reading.","verdict":"false_positive","confidence":0.9},{"id":"blocker:references/server-and-widgets.md:134:system-reconnaissance","reason":"The line contains React inline styling for a card border. It has no reconnaissance behavior.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:references/state-and-context.md:234:ruby-shell-backtick-execution","reason":"The backticks are a JavaScript template literal used for a follow-up message prompt. They do not invoke a command interpreter.","verdict":"false_positive","confidence":0.95},{"id":"blocker:references/state-and-context.md:37:system-reconnaissance","reason":"The line updates a todo item in local widget state. It does not enumerate or inspect the system.","verdict":"false_positive","confidence":0.95},{"id":"blocker:references/state-and-context.md:212:system-reconnaissance","reason":"The line toggles a task completion field in sample widget state. It is unrelated to system reconnaissance.","verdict":"false_positive","confidence":0.95},{"id":"blocker:references/ui-guidelines.md:22:system-reconnaissance","reason":"The line describes fullscreen widget behavior and the host composer overlay. It does not ask for sensitive host or system details.","verdict":"false_positive","confidence":0.95},{"id":"blocker:references/ui-guidelines.md:135:system-reconnaissance","reason":"The line documents safe area inset values for layout. It is UI metadata, not reconnaissance.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:references/widget-patterns.md:202:ruby-shell-backtick-execution","reason":"The backticks close a JSX className template literal in a theming example. They are not shell execution.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:references/widget-patterns.md:204:ruby-shell-backtick-execution","reason":"The backticks build a React className string based on theme. No command execution API is used.","verdict":"false_positive","confidence":0.95},{"id":"blocker:references/widget-patterns.md:69:system-reconnaissance","reason":"The line is a Tailwind grid layout example. It does not inspect the environment or system.","verdict":"false_positive","confidence":0.95},{"id":"blocker:references/widget-patterns.md:106:system-reconnaissance","reason":"The line demonstrates a widget calling a named MCP tool with an ID. It is an application interaction example, not system reconnaissance.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:4:ruby-shell-backtick-execution","reason":"The backticks only format the replacement skill name in the deprecation notice. The actual install command risk is represented by the separate line 6 finding.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:5:ruby-shell-backtick-execution","reason":"The backticks only format the replacement skill name, but the surrounding prose introduces an install directive. The command itself is captured in the line 6 finding.","verdict":"false_positive","confidence":0.75},{"id":"external_commands:SKILL.md:6:ruby-shell-backtick-execution","reason":"This line contains an executable npx command in the skill front matter that instructs installation of another skill. In an untrusted marketplace skill, that can trigger external code retrieval or supply-chain exposure if followed automatically.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","reason":"The line tells users to use the replacement skill name and does not itself contain an executable command. The related install-command concern is covered by line 6.","verdict":"false_positive","confidence":0.82},{"id":"external_commands:SKILL.md:40:ruby-shell-backtick-execution","reason":"The line starts a TypeScript fenced code block in documentation. It does not execute Ruby, shell, or any command.","verdict":"false_positive","confidence":0.96}],"semantic_findings":[],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"confirmed_risk_level does not match the canonical trust resolver"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":1,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}