Skills/npm/canli-mcp

canli-mcp@0.21.0

CAUTION

Publisher claims: "Every Canli Capital MCP server in one: 442 finance tools (SEC filings and XBRL, statements as filed, figures checked against the filings, markets, ownership, options, the Fed and macro, dividends, quant, backtest validation, paper trading) behind five too" Observed in sandbox: no network, touches nothing outside the project, writes no memory.

Registry npm (MCP server)Publisher arhancanli · publishing for 35 daysInstalls 6,238Last detonated 5 h ago

Coverage

Server started and answered tools/list.
Tested
MCP initialize and tools/list · every tool description, for hidden instructions · every file read, file written and host contacted by what ran
Not tested
what the tools do when called with real credentials

Before you give it your token

It will ask for
ALPACA_API_KEY_IDALPACA_API_SECRET_KEYALPACA_PAPER_SECRET_KEYALPHAVANTAGE_API_KEYAPCA_API_KEY_IDAPCA_API_SECRET_KEYCANLI_SERVE_TOKENCMC_API_KEYDUNE_API_KEYFINANCIAL_DATASETS_API_KEYFMP_API_KEYQUIVER_API_KEYUW_API_KEYVALUEIN_TOKENConfiguration, not credentials: ALPACA_DATA_FEED, ALPACA_PAPER_KEY_ID, CANLI_AS_OF, CANLI_ASK, CANLI_FRONT, CANLI_HOME, CANLI_OFFLINE, CANLI_PACKS, CANLI_PLUGINS, CANLI_POLICY, CANLI_QUOTE_SECONDS, CANLI_UPSTREAMS
Where it talks to
canlicapital.com (its own)Also sec.gov, coingecko.com, coinpaprika.com, dexpaprika.com, crypto.com, etherscan.io, blockscout.com, kalshi.com, gatemcp.ai, financialmodelingprep.com, alphavantage.co, financialdatasets.ai, unusualwhales.com, quiverquant.com, valuein.biz, coinmarketcap.com, dune.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
what the tools do when called with real credentials

Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names sec.gov, coingecko.com, coinpaprika.com, dexpaprika.com, crypto.com, etherscan.io, blockscout.com, kalshi.com, gatemcp.ai, financialmodelingprep.com, alphavantage.co, financialdatasets.ai, unusualwhales.com, quiverquant.com, valuein.biz, coinmarketcap.com, dune.com as well as its own vendor. The guard injects ALPACA_API_KEY_ID, ALPACA_API_SECRET_KEY, ALPACA_PAPER_SECRET_KEY, ALPHAVANTAGE_API_KEY, APCA_API_KEY_ID, APCA_API_SECRET_KEY, CANLI_SERVE_TOKEN, CMC_API_KEY, DUNE_API_KEY, FINANCIAL_DATASETS_API_KEY, FMP_API_KEY, QUIVER_API_KEY, UW_API_KEY, VALUEIN_TOKEN only into requests to canlicapital.com (and its subdomains) and refuses the rest.

$vet-skills run --secrets ALPACA_API_KEY_ID=canlicapital.com,ALPACA_API_SECRET_KEY=canlicapital.com,ALPACA_PAPER_SECRET_KEY=canlicapital.com,ALPHAVANTAGE_API_KEY=canlicapital.com,APCA_API_KEY_ID=canlicapital.com,APCA_API_SECRET_KEY=canlicapital.com,CANLI_SERVE_TOKEN=canlicapital.com,CMC_API_KEY=canlicapital.com,DUNE_API_KEY=canlicapital.com,FINANCIAL_DATASETS_API_KEY=canlicapital.com,FMP_API_KEY=canlicapital.com,QUIVER_API_KEY=canlicapital.com,UW_API_KEY=canlicapital.com,VALUEIN_TOKEN=canlicapital.com -- npx -y canli-mcp

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 (2 scenarios) on 2026-11-14 and scored it 72/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: Hidden zero-width characters detected; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.

Behavior trace

Honeypot run · 25 s · 2 scenarios
t+CategoryObserved action
0.0sprocessno install scripts in bundle
4.9sprocessdependency install exit 0
25sfilesystemread ~/.canli/upstreams.json outside project
25sclaimed5 tools: find_tool, describe_tool, run_tool, history, financial_statements
25stools65ab2a8092bb149d
25stools0e476d2a08ffe7a6
25stoolsa0df7fd2cd8de36d
25stoolsb3e18c4a22ca97b5
25stools7e2677f9cfde6044
25sprocessscript backend runs setup only
25sprocessno install scripts to re-run

Static findings

MEDIUM
npx invocation of non-well-known packagesrc/server.mjs:514 · npx invocation of non-well-known package — may execute untrusted codeif (readOnly) throw new Error("The sentinel watches from your own machine. Run it locally: npx -y canli-mcp");Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
File type combined with upload actionsrc/index.json:1 · File type combined with upload action — agent may exfiltrate local data files…19 by a key published at https://canlicapital.com/.well-known/canli-receipt-keys.json.","","id?: string, receipt?: object, include_receipt?: boolean"],["backtest_strategy","validation","validation","Backtest a rule over a parameter grid, v…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.
AST07
MEDIUM
npx invocation of non-well-known packagesrc/server.mjs:574 · npx invocation of non-well-known package — may execute untrusted code… answers, and the hosted server keeps nothing between requests. Run it locally: npx -y canli-mcp"); const entry = await preregs.add(args); gov?.audit?.record?…Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
HIGH
Hidden zero-width characters detectedsrc/check.mjs:9 · Hidden zero-width characters detected — may conceal contentconst lines = text.replace(/^/, "").split(/\r?\n/).filter((l) => l.trim());Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.
AST07
LOW
Role reassignment attemptCHANGELOG.md:46 · Role reassignment attempt · informational: not an instruction file… a model ("ignore all previous instructions", a chat template's system marker, "you are now an assistant"), the answer carries `caution` with where they are and a short excerp…Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.
AST01
MEDIUM
npx invocation of non-well-known packagesrc/luck.mjs:106 · npx invocation of non-well-known package — may execute untrusted codescope === "request" ? "Hosted: only this request is counted; run the search as one batch, or locally with npx canli-mcp." : "",Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
npx invocation of non-well-known packagelocal/setup.mjs:16 · npx invocation of non-well-known package — may execute untrusted code…onfig/Code/User"), file: "mcp.json", key: "servers", entry: { type: "stdio", ...NPX } }, { id: "gemini", name: "Gemini CLI", root: ".gemini", file: "settings.json"…Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
File type combined with upload actionsrc/server.mjs:628 · File type combined with upload action — agent may exfiltrate local data files…er allowed to change things)` : ""}.` + " Any argument can be {\"$file\": \"path.csv\", \"column\": \"close\"} (or \"columns\": [...] / \"all\") instead of pasted numbers. {\"$result\": i, \"path\": \"close\"} passes batch call i's output …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.
AST07
MEDIUM
Process kill commandsrc/index.json:1 · Process kill command — agent can terminate processes…ount: equity, cash, buying power, positions, open orders, the market clock, the kill switch and the local order log's verified head.","positions holdings balance cas…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
MEDIUM
npx invocation of non-well-known packagesrc/server.mjs:520 · npx invocation of non-well-known package — may execute untrusted code…adOnly) throw new Error("The signed log is on your own machine. Run it locally: npx -y canli-mcp"); return signedTrialCount(args, { dir: join(canliHome(), "audit"), k…Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
LOW
Prompt injection attemptCHANGELOG.md:46 · Prompt injection attempt — 'ignore previous instructions' · informational: not an instruction file…ce's text: when a result from any pack holds phrases written to steer a model ("ignore all previous instructions", a chat template's system marker, "you are now an assistant"), the answer carr…Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.
AST01
MEDIUM
npx invocation of non-well-known packagelocal/setup.mjs:9 · npx invocation of non-well-known package — may execute untrusted codeconst NPX = { command: "npx", args: ["-y", "canli-mcp"] };Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
npx invocation of non-well-known packagesrc/worlds.mjs:120 · npx invocation of non-well-known package — may execute untrusted code…{String(bad[0].error).slice(0, 140)}). On the hosted server, run the local one: npx -y canli-mcp.`); const factors = prices.slice(0, FACTORS.length), own = prices.s…Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
npx invocation of non-well-known packagelocal/setup.mjs:102 · npx invocation of non-well-known package — may execute untrusted code"Claude Code: claude mcp add canli -s user -- npx -y canli-mcp",Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
npx invocation of non-well-known packagesrc/server.mjs:522 · npx invocation of non-well-known package — may execute untrusted code… session, and the hosted server keeps nothing between requests. Run it locally: npx -y canli-mcp"); return vault; }; tools.restatement_causes = (args) => { allowed(…Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
npx invocation of non-well-known packagelocal/setup.mjs:60 · npx invocation of non-well-known package — may execute untrusted code…y hold comments)", file, add_by_hand: { [client.key]: { [name]: client.entry ?? NPX } } }; } if (!json || typeof json !== "object" || Array.isArray(json)) return…Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
File type combined with upload actionsrc/server.mjs:113 · File type combined with upload action — agent may exfiltrate local data files…l explains arguments in full). To save tokens: pass long data as {"$file": "path.csv", "column": "close"} instead of pasting numbers; put several calls in one run_tool, using {"$result": i, "path": "field"} to feed one call's output into t…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.
AST07
MEDIUM
npx invocation of non-well-known packagesrc/server.mjs:562 · npx invocation of non-well-known package — may execute untrusted codeif (readOnly) throw new Error("export_result writes to your own machine. Run it locally: npx -y canli-mcp");Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
HIGH
Access to sensitive file pathslocal/commands.mjs:16 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesreturn new StdioClientTransport({ command, args, env: { ...getDefaultEnvironment(), ...env }, stderr: "ignore" });Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05

Cost to the agent

Instructions loaded
≈99 tok
1 file · 80 in bundle
Tool list per prompt
≈1,816 tok
5 tools · 363 per tool
Handshake
824 ms
launch to tools/list, stdio
Undocumented tools
0
description under 20 chars · avg 373

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 canli-mcp@0.21.0 as of 3 h ago. This is the package itself, not its dependencies.

What would make this Verified

8 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%
  1. Unclaimed publisher≈ +8 on the totalClaim arhancanli: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
  2. Touches files outside the project≈ +7 on the totalKeep reads and writes inside the working directory, or declare the exact paths in `filesystem:` and explain why in the README.
  3. Hidden zero-width characters detected≈ +4 on the totalKeep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.
  4. 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.
  5. npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.
  6. 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.
Publish a new version to npm, then queue it here. Not your skill? Claim the handle to get verdict changes by email.Claim arhancanliPropose a patch to the maintainer