mcp-uofx@0.1.1
CAUTION· static onlyPublisher claims: "Custom MCP server for UOF X Total Solution" Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Before you give it your token
- It will ask for
MCP_SSE_TEST_TOKENOAUTH_CLIENT_IDOAUTH_CLIENT_SECRETUOFX_API_KEYConfiguration, not credentials: MCP_SSE_HOST, MCP_SSE_PORT, MCP_SSE_TEST_USER, UOFX_BASE_URL, UOFX_CORP_CODE, UOFX_DEV_MODE, UOFX_VERIFY_SSL- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- nothing has run yet
- What we could not test
- everything: the server has not run yet
Run it before you trust it. Nothing has run yet: the code was read, the server was not. `vet-skills try` runs this exact version in the honeypot in about a minute.
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 analysed it statically (a sandbox run is pending) on 2026-11-10 and scored it 57/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: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
# ── 載入 .env ────────────────────────────────────────────────────Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 讀取 repo root 或目前工作目錄的 .env;正式部署建議直接使用環境變數。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.for env_path in (Path.cwd() / ".env", Path(__file__).resolve().parents[2] / ".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.raise RuntimeError("UOFX_BASE_URL is required. Set it in .env or environment variables.")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.檔案權限設為 0600(僅擁有者可讀寫),與 ~/.kube/config 相同慣例。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.檔案權限設為 0600(僅擁有者可讀寫),與 ~/.kube/config 相同慣例。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.s,_ = req("POST","/upload/chunk",{"fileName":"test.txt","chunkIndex":0,"totalChunks":1,"chunkData":txt_b64},"/openapi/file/v1"); log(m,"POST /upload/chunk",s)Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.load_dotenv(Path(__file__).resolve().parents[2] / ".env", override=False)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._dotenv: dict[str, str] = {k: v for k, v in dotenv_values(ROOT / ".env").items() if v is not None}Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print("❌ 請先在 .env 中設定 OAUTH_CLIENT_ID 和 OAUTH_CLIENT_SECRET")Fix: 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.# 官方 OAuth token (from mcp-official-test/.env)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.load_dotenv(Path.cwd() / ".env", override=False)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_path = os.path.join(os.path.dirname(__file__), "../.env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.s,_ = dms("/doc/exist",{"folderCode":folder_code,"fileName":"test.txt"},"POST"); log(m,"POST /doc/exist",s)Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.# 明確將 .env 讀进來子程序環境(跟 VS Code 的 settings.json env block 行為相同)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.s,_ = req("POST","/upload/base64",{"fileName":"test.txt","base64Content":txt_b64,"mimeType":"text/plain"},"/openapi/file/v1"); log(m,"POST /upload/base64",s)Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.load_dotenv(Path.cwd() / ".env", override=False)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 從目前工作目錄或 repo root 載入 .env(不覆寫外部傳入的環境變數)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.s,dr = dms("/doc",{"folderCode":folder_code,"fileName":"tst.txt","fileToken":file_token},"POST"); log(m,"POST /doc",s)Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why._dotenv: dict[str, str] = {k: v for k, v in dotenv_values(ROOT / ".env").items() if v is not None}Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.s,_ = req("POST","/upload/link",{"fileName":"test.txt","fileUrl":"https://example.com/test.txt"},"/openapi/file/v1"); log(m,"POST /upload/link",s)Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.load_dotenv(Path(__file__).resolve().parents[2] / ".env", override=False)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env=ENV, # 明確傳遞 .env 金鑰(模擬 VS Code settings.json env block)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.for env_path in (Path.cwd() / ".env", Path(__file__).resolve().parents[2] / ".env"):Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.OAUTH_TOKEN_PATH = os.path.join(os.path.dirname(__file__), "../../mcp-official-test/.env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print("❌ 請先在 .env 中設定 UOFX_BASE_URL")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.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
No advisories in OSV for mcp-uofx@0.1.1 as of 4d ago. This is the package itself, not its dependencies.
What would make this Verified
23 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim asgard-ai-platform: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- References a credential file in the home directory≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- 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.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.