mcp-ticketer@2.3.19
VERIFIED· not startedPublisher claims: "Universal ticket management interface for AI agents with MCP support" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Verified 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
GITHUB_TOKENJIRA_ACCESS_TOKENJIRA_API_TOKENLINEAR_API_KEYMCP_TICKETER_API_KEYMCP_TICKETER_GITHUB_TOKENMCP_TICKETER_JIRA_TOKENMCP_TICKETER_LINEAR_API_KEYor--github-tokenConfiguration, not credentials: FORMULA_PATH, GITHUB_OWNER, GITHUB_REPO, GITHUB_REPO_URL, JIRA_ACCESS_USER, JIRA_EMAIL, JIRA_PROJECT_KEY, JIRA_SERVER, LINEAR_TEAM_ID, LINEAR_TEAM_KEY, MCP_TICKETER_ADAPTER, MCP_TICKETER_AITRACKDOWN_BASE_PATH, MCP_TICKETER_GITHUB_OWNER, MCP_TICKETER_GITHUB_REPO, MCP_TICKETER_HYBRID_ADAPTERS, MCP_TICKETER_HYBRID_MODE, MCP_TICKETER_JIRA_EMAIL, MCP_TICKETER_JIRA_SERVER, MCP_TICKETER_LINEAR_TEAM_ID, MCP_TICKETER_LINEAR_TEAM_KEY- Where it talks to
- no vendor host named in the codeAlso atlassian.net, linear.app, atlassian.com, 1password.com, claude.ai, asana.com, company.com — 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
- server startup · the tool list · tool behavior
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names atlassian.net, linear.app, atlassian.com, 1password.com, claude.ai, asana.com, company.com as well as its own vendor. The guard injects GITHUB_TOKEN, JIRA_ACCESS_TOKEN, JIRA_API_TOKEN, LINEAR_API_KEY, MCP_TICKETER_API_KEY, MCP_TICKETER_GITHUB_TOKEN, MCP_TICKETER_JIRA_TOKEN, MCP_TICKETER_LINEAR_API_KEY 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 [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (3 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-10 and scored it 82/100 (Verified). In what ran, nothing we could detect went wrong: no undeclared network egress, no credential reads, no persistent instruction writes. What it does with a real credential was not observed; the static findings and the publisher carry the rest of the score. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 3 scenarios · 0 deviationsStatic findings
"[dim]Make sure your .env file contains adapter credentials[/dim]"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.source .env.localFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.source .env.localFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.app = typer.Typer(help="Auto-discover configuration from .env files")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."[dim]Make sure your .env file contains adapter credentials[/dim]"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.print("[yellow]No .env files found[/yellow]")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""CLI command for auto-discovering configuration from .env files."""Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Load .env.local if it existsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if [ -f ".env.local" ]; thenFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Load environment variables from .env file.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Load environment variables from .env.local if it exists (as override)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Get auto-discovered configuration from .env files.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.self.project_root / ".env.local",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# First try our improved .env configuration loaderFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_files = [".env.local", ".env"]Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.".env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.f"Added {len(env_vars)} environment variables from .env.local"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file = Path.cwd() / ".env.local"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Load environment variables from .env filesFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file = Path.cwd() / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.found_in: str = ".env" # Which file it was found inFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."[cyan]🔍 Auto-discovering configuration from .env files...[/cyan]"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_path: Path to .env fileFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.print("\n[dim]Configuration found in: .env files[/dim]")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.enable_env_discovery: Enable auto-discovery from .env files (default: True)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.It auto-detects adapter configuration from .env files or prompts forFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# No .env file found in project directory - this is okayFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file = Path.cwd() / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.print("Set it in .env.local or environment variables")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.4. Auto-discovered .env filesFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.4. Auto-discovered .env filesFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Load environment variables from .env.localFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- Auto-discovery of adapter configuration from .env filesFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Load environment variables from .env files."""Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# We explicitly avoid upward directory search to prevent loading .env files from parent projectsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.".env.local",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Explicitly load environment variables from .env.local if it existsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.self.project_root / ".env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Check .env.local first, then .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Auto-discovery of configuration from .env and .env.local files.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# which could load .env files from unrelated parent projectsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.2. Loads from multiple sources (.env.local, .env, environment variables)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Discover adapter configuration from .env or .env.local files.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_local_file = Path.cwd() / ".env.local"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.2. Environment discovery (environment variables and .env files in cwd)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Priority: .env.local (highest) > .env (base)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_path = Path.cwd() / ".env.local"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Add relevant adapter-specific vars from .env.local (overrides config.json)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_file_path = Path(project_path) / ".env.local"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 2. Apply auto-discovered .env config (if enabled)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# This ensures we load .env files from the target project directory, not from where the command is executedFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.process = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Force kill if still aliveFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.env_file = project_path / ".env.local"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Load environment variables from project directory's .env.local if it existsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# Check if it's the official GitHub MCP server (uses npx or server-github)Fix: Pin versions and sources; vendor anything fetched at install time.subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for mcp-ticketer@2.3.19 as of 4d ago. This is the package itself, not its dependencies.