Back to skill

Security audit

tokei-agent

Security checks for vulnerabilities and agentic risk

Overview

The skill coherently manages Tokei campaigns and clearly discloses its sensitive operations, including publishing, participant creation, and webhooks.

Use an expiring read-only key unless changes are needed, and pin the package version. With write access, ensure your agent follows the approval instructions before public changes, participant imports, or live webhooks. Protect participant data and webhook secrets, use only trusted webhook destinations, and record marketing consent only when actually collected. Deleting a webhook also deletes its delivery history.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
.
Finding

Public and destructive operations lack an enforced approval gate

Content
View full analysis

Impact

An Agent invocation without the required sign-off can make a draft public. Webhook deletion can remove a subscription and, according to its manifest description, its queued and historical delivery records.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (18)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The description declares page and campaign management and read access to signups and related results, but does not declare creating participant entries or assigning their points. The supplied command performs that additional write capability. It remains within the Tokei platform, but its entry-creation behavior is not represented in the declared description.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

Most tested behavior matches the declared Tokei campaign-management purpose. However, entries:create is a distinct participant-data write capability not disclosed by the description's read-oriented treatment of signups. The tests explicitly expect a POST containing participant identity and points data. This assessment is limited to the supplied test file: HTTP requests are mocked, and the underlying implementation is not included. Untested advertised features are not treated as mismatches.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

Most tested functionality aligns with the description, and MCP transport is a supporting implementation detail. However, entries_create is a distinct write capability affecting participant records that is not disclosed by the stated page-management and signup-reading capabilities. The tests explicitly expect entry-creation POST requests and forwarding marketing_consent. This assessment is limited to the supplied tests; the implementation and live API behavior were not provided or verified.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

The entries:create command is an additional write capability affecting campaign participants and points, rather than merely reading signup information or configuring pages. The remaining commands align with the declared purpose or are supporting interfaces, such as authentication checks, help, and the MCP server. No unrelated resource access or exfiltration is evident in the supplied chunk.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · src/__tests__/commands.test.ts (reported line 786)May include surrounding context.

ts
expect(h.err).toEqual([]);
  });

  it("webhooks:delete <webhookId> -> DELETE /api/v1/webhooks/:id, no request body", async () => {
    const h = harness();
    const code = await main(["webhooks:delete", "w-1"], h.io);
    expect(code).toBe(0);

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · src/__tests__/mcp.test.ts (reported line 832)May include surrounding context.

ts
expect(res.result.content.length).toBe(1);
  });

  it("webhooks_delete -> DELETE /api/v1/webhooks/:id", async () => {
    const h = harness();
    const session = createMcpSession(h.io);
    await rpc(session, {

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx tokei-agent'.

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

Although this example invokes CLI help rather than an MCP server, npx tokei-agent --help can download and execute an unpinned package version when no suitable local installation exists. A compromised future release could execute code with the user's privileges and access local files or available credentials; the README provides no evidence that the package is currently malicious.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx -y tokei-agent'.

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The MCP configuration runs npx -y tokei-agent mcp without pinning a version, allowing subsequent launches to resolve an unreviewed release while suppressing the installation prompt. A compromised release would execute locally with the supplied TOKEI_API_KEY, potentially exposing account data or modifying campaigns and webhooks when the key permits writes.

Content

No source excerpt is available for this finding.

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, network.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx tokei-agent'.

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The unversioned npx command can download and execute a changing package release, even though this particular example only requests help rather than starting an MCP server. A compromised future release could execute with the agent's local privileges and access available credentials; the unpinned global-install alternative has the same underlying supply-chain exposure.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 404)May include surrounding context.

md
whatever was originally configured.
3. **Some types need a deployment prerequisite — warn the human before adding one.** `linkedin_share`/`linkedin_post` need the `linkedin_oidc` provider enabled on this deployment, and all 3 `steam_*` types need Steam login. `actions:catalog`'s `needs` field says this per type — `null` means no prerequisite. X/Twitter, Discord, Facebook, Instagram, TikTok, Twitch, Product Hunt, `linkedin_follow`, `linkedin_company_follow` and link rows have none — safe to add without asking.
4. Draft/publish semantics are unchanged by any of this. Unknown keys are stripped on the way in, never stored.
5. **Link-row rules:** a label that doesn't start with `"Visit Our "` renders as a non-clickable generic row; the clickable, credited path also requires the page to have a `campaign_url` configured.
6. **Rows of one `actionType` are capped, and can carry a stable `id`.** At most 5 rows may share one `actionType` — but only for `twitter_follow`, `instagram_follow` and `f

MCP server referenced without pinned version: 'npx -y tokei-agent'.

Medium
Category
MCP Rug Pull
Confidence
99% confidence
Finding

The MCP registration invokes an unpinned package with npx -y, allowing a changed release to execute without an installation confirmation. Because the server receives TOKEI_API_KEY and exposes write-capable API operations when the key permits them, a compromised release could steal the credential or modify campaigns and webhook destinations.

Content

No source excerpt is available for this finding.

The CLI supports creating participant entries and assigning points, while the manifest describes signup and leaderboard access as read-only.

Medium
Category
Excessive Agency
Confidence
96% confidence
Finding

The test at L0662–L0691 verifies that entries:create sends a POST to /api/v1/contests/:id/entries with participant identity, action type, and caller-specified points. The manifest declares reading signups and leaderboards, not creating participant records or awarding points; this additional write capability can affect campaign participation and rankings.

Content

No source excerpt is available for this finding.

The CLI exposes signup creation and point assignment, whereas the skill description only declares reading signups.

Medium
Category
Excessive Agency
Confidence
88% confidence
Finding

L493–L495 expose entries:create with email, action type, and points, and L209 describes this command as recording an entry. This goes beyond the manifest's stated signup-reading capability: creating participant records and assigning points can affect campaign participation and rankings, rather than merely retrieve signup information.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx tokei-agent'.

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

The skill exposes signup creation and point awards although the manifest describes signup access as read-only.

Medium
Category
Excessive Agency
Confidence
95% confidence
Finding

The manifest describes reading signups, leaderboards, and winner selections, but entries_create maps to POST /contests/{contest_id}/entries (L820-L823), creating participants and allowing up to 10,000 points to be awarded (L791-L795). It also accepts a marketing-consent assertion that can enable email-provider syncing (L805-L807), extending beyond the declared signup-reading capability and potentially affecting competition outcomes and participant communications.

Content

No source excerpt is available for this finding.

Count formatting forces the en-US locale without a user locale choice or documented justification.

Low
Category
Output Handling
Confidence
92% confidence
Finding

formatCount explicitly selects "en-US", so numeric output follows US formatting conventions regardless of the user's locale. This file provides neither a locale option nor a documented region-specific justification for that constraint.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.