{"data":{"skill":{"slug":"andresnaza-clickup-integration-expert","name":"ClickUp Integration Expert","icon":"📦","repo":"https://github.com/AndresNaza/claude-plugins/tree/main/clickup-sync/skills/clickup-integration","status":"approved","author":"AndresNaza","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"2f43364a-e76b-4b19-91a8-ca134481b189","skill_id":"0a630540-f92c-4a6a-9f48-0ac8ff1500ff","version":8,"content_hash":"577d862b368d93ca71a881dae61fa2ab","risk_level":"low","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Most external command findings are false positives caused by Markdown backticks around paths, JSON examples, and slash commands. One documented CLI setup command and the hardcoded ClickUp MCP URL are real user-consent risks for adding a remote MCP integration.","remediation":[{"issue":"The MCP setup command changes local Claude MCP configuration.","severity":"medium","suggestion":"Tell users to verify the ClickUp MCP endpoint and approve the configuration change before running the command."},{"issue":"The OAuth authentication step does not describe requested ClickUp access.","severity":"low","suggestion":"Document the expected OAuth permissions and how users can revoke ClickUp access after testing."},{"issue":"Markdown slash commands and examples create noisy external command detections.","severity":"low","suggestion":"Label slash commands as Claude command examples and separate them from shell command instructions."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":22,"line_start":22},{"file":"SKILL.md","line_end":35,"line_start":24},{"file":"SKILL.md","line_end":41,"line_start":35},{"file":"SKILL.md","line_end":42,"line_start":41},{"file":"SKILL.md","line_end":43,"line_start":42},{"file":"SKILL.md","line_end":44,"line_start":43},{"file":"SKILL.md","line_end":45,"line_start":44},{"file":"SKILL.md","line_end":46,"line_start":45},{"file":"SKILL.md","line_end":47,"line_start":46},{"file":"SKILL.md","line_end":52,"line_start":47},{"file":"SKILL.md","line_end":54,"line_start":52},{"file":"SKILL.md","line_end":56,"line_start":54},{"file":"SKILL.md","line_end":61,"line_start":56}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":53,"line_start":53}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":54,"line_start":52}],"confidence":0.74,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The fenced block contains a real CLI command on line 53 that adds a remote ClickUp MCP endpoint to Claude configuration. This is expected for the integration but still changes local tool configuration."}],"low_findings":[{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":53,"line_start":53}],"confidence":0.84,"description":"claude mcp add --transport http clickup https://mcp.clickup.com/mcp","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"Line 53 hardcodes an external ClickUp MCP URL used for networked integration setup. The endpoint appears aligned with the skill purpose, but it is still a remote service dependency."},{"title":"OAuth Access Required For Remote MCP Integration","locations":[{"file":"SKILL.md","line_end":56,"line_start":53}],"confidence":0.86,"description":"The skill tells users to add the ClickUp MCP endpoint and authenticate via OAuth. This can grant the integration access to ClickUp data, so users need clear scope and revocation guidance.","review_kind":"security","source_category":"semantic","source_severity":"low","confidence_reasoning":"The setup command and OAuth instruction are explicit on lines 53-56. The behavior is legitimate for ClickUp sync, but it creates an account access consideration."}],"dangerous_patterns":[],"files_scanned":1,"total_lines":69,"audit_model":"codex","audited_at":"2026-07-07T20:04:19.253+00:00","created_at":"2026-07-08T00:13:07.47365+00:00","static_findings":[{"id":"external_commands:SKILL.md:22:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Stored in `.roadmap/clickup-config.json`:","category":"external_commands","line_end":22,"severity":"medium","line_start":22},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```json","category":"external_commands","line_end":35,"severity":"medium","line_start":24},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":41,"severity":"medium","line_start":35},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `/clickup-sync:setup` | Configure ClickUp connection |","category":"external_commands","line_end":42,"severity":"medium","line_start":41},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `/clickup-sync:push` | Push to ClickUp |","category":"external_commands","line_end":43,"severity":"medium","line_start":42},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `/clickup-sync:pull` | Pull from ClickUp |","category":"external_commands","line_end":44,"severity":"medium","line_start":43},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `/clickup-sync:sync` | Full bidirectional sync |","category":"external_commands","line_end":45,"severity":"medium","line_start":44},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `/clickup-sync:status` | View sync status |","category":"external_commands","line_end":46,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:46:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `/clickup-sync:link` | Manually link items |","category":"external_commands","line_end":47,"severity":"medium","line_start":46},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `/clickup-sync:unlink` | Remove sync links |","category":"external_commands","line_end":52,"severity":"medium","line_start":47},{"id":"external_commands:SKILL.md:52:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":54,"severity":"medium","line_start":52},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":56,"severity":"medium","line_start":54},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Then run `/mcp` to authenticate via OAuth.","category":"external_commands","line_end":61,"severity":"medium","line_start":56},{"id":"network:SKILL.md:53:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"claude mcp add --transport http clickup https://mcp.clickup.com/mcp","category":"network","line_end":53,"severity":"low","line_start":53}],"finding_verdicts":[{"id":"external_commands:SKILL.md:22:ruby-shell-backtick-execution","reason":"Line 22 uses Markdown inline code for a local configuration file path. It does not execute Ruby, shell, or any external command.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","reason":"Lines 24-35 are a fenced JSON configuration example. The backticks delimit documentation and do not create command execution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","reason":"The matched text is the closing Markdown fence for the JSON example. No executable command or dynamic shell behavior is present.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","reason":"The text documents a Claude slash command in a table. It is not Ruby backtick execution or a shell command.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","reason":"The text documents a Claude slash command for pushing data. It is not shell execution and contains no command interpolation.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:43:ruby-shell-backtick-execution","reason":"The text documents a Claude slash command for pulling data. The Markdown backticks are formatting, not executable syntax.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","reason":"The text documents a bidirectional sync slash command. It is not a Ruby or shell backtick execution pattern.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"The text documents a status slash command in Markdown. It does not run a process or expose an injection vector.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:46:ruby-shell-backtick-execution","reason":"The text documents a manual link slash command. The backticks are display formatting and do not invoke a shell.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","reason":"The text documents an unlink slash command in a command table. It is not external process execution by the skill itself.","verdict":"false_positive","confidence":0.93},{"id":"external_commands:SKILL.md:52:ruby-shell-backtick-execution","reason":"The fenced block contains a real CLI command on line 53 that adds a remote ClickUp MCP endpoint to Claude configuration. This is expected for the integration but still changes local tool configuration.","verdict":"confirmed","severity":"medium","confidence":0.74},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","reason":"The matched line is a Markdown closing fence near setup instructions. The executable setup command is covered by the line 52 verdict.","verdict":"false_positive","confidence":0.86},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","reason":"Line 56 describes running the Claude MCP interface for OAuth. It is a user-mediated tool command, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.82},{"id":"network:SKILL.md:53:hardcoded-url","reason":"Line 53 hardcodes an external ClickUp MCP URL used for networked integration setup. The endpoint appears aligned with the skill purpose, but it is still a remote service dependency.","verdict":"confirmed","severity":"low","confidence":0.84}],"semantic_findings":[{"title":"OAuth Access Required For Remote MCP Integration","severity":"low","locations":[{"file":"SKILL.md","line_end":56,"line_start":53}],"confidence":0.86,"description":"The skill tells users to add the ClickUp MCP endpoint and authenticate via OAuth. This can grant the integration access to ClickUp data, so users need clear scope and revocation guidance.","confidence_reasoning":"The setup command and OAuth instruction are explicit on lines 53-56. The behavior is legitimate for ClickUp sync, but it creates an account access consideration."}],"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":"low","confirmedFindingCount":1,"capabilityReviewCount":2,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}