keen-mcp@r1
CAUTION· install onlyPublisher claims: "Enables AI agents to search and invoke 1,939 Atlassian automation tools across Jira, Confluence, Bitbucket, Admin, Assets, and more, with cached reads and JSON-RPC over stdio. It helps agents find tools without calling Atlassian and execute operations while reducing rate-limit pressure." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
JIRA_CLOUD_PLATFORM_PASSWORDor--no-authConfiguration, not credentials: JIRA_CLOUD_PLATFORM_USERNAME, TEMPLATE_VARS- Where it talks to
- no vendor host named in the codeAlso atlassian.com, atlassian.net — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names atlassian.com, atlassian.net as well as its own vendor. The guard injects JIRA_CLOUD_PLATFORM_PASSWORD only into requests to the host you bind (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is keen-mcp@r1 safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-11 and scored it 78/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Privileged sudo command; Auto-update or dynamic fetch configuration; Privileged sudo command. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
out = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.out = subprocess.run([keen, *args, "--json"], capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.rootCmd.PersistentFlags().BoolVar(&flags.csv, "csv", false, "Output as CSV (table and array responses)")Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.subprocess.run(["gofmt", "-w", str(OUT)], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.sudo dnf install ./keen_linux_amd64.rpm # Fedora, RHEL (arm64: keen_linux_arm64.rpm)Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.if subprocess.run([sys.executable, str(REPO / "scripts" / "regen" / "graphql.py"), "--check"]).returncode:Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.…"End-User Data type your app stores"}}}},"AddonVersionDeployment":{"required":["autoUpdateAllowed","cloud","connect","dataCenter","permissions","server"],"type":"object","properties":{"server":{"type":"boolean","description":"True if the v…Fix: Pin versions and sources; vendor anything fetched at install time.r = subprocess.run([keen, *c.split(), "--help"], capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.out = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.…d/jira/platform/basic-auth-for-rest-apis/).**\nIf you don’t have Jira, export a .csv of the user list. Learn how to [export users from a site](https://support.atlassian.com/organization-administration/docs/export-users-from-a-site/).","sch…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.run = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.out = subprocess.run(["bash", "-c", 'source scripts/regen/config.sh && printf "%s\\n" "${SPECS[@]}"'],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.sudo apt install ./keen_linux_amd64.deb # Debian, Ubuntu (arm64: keen_linux_arm64.deb)Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.self.p = subprocess.Popen([binary], stdin=subprocess.PIPE, stdout=subprocess.PIPE,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["gofmt", "-w", str(TABLE)], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.…file with package dependency information. Currently, we only accept package-lock.json files that are below 2MB. \\\n\\\nThe baseSourceUrl should be a url link to your lock file, ideally with \"#lines-\" appended at the end, if from Bitbuck…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… 'multipart/form-data' is defined in [RFC 7578](https://www.ietf.org/rfc/rfc7578.txt).\nMost client libraries have classes that make it easier to implement\nmultipart posts, like the [MultipartEntityBuilder](https://hc.apache.org/httpcompo…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…g a user to the org-admins group through this API no longer grants organization admin access. To assign organization admin access, use the [Assign organization-level role e…Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
2 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim imogenlabs: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Auto-update or dynamic fetch configuration≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.