Back to skill

Security audit

Deal Works Mcp

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for deal.works, but it exposes live financial, publishing, dispute, governance, and agent-deployment actions without clear confirmation safeguards, and some install examples point to an inconsistent unpinned npm package.

Review carefully before installing. Use only the intended pinned package, avoid copying the inconsistent @goettelman npx examples, and provide a narrowly scoped API key with transaction limits. Do not allow this server to run autonomously for fund transfers, external cashouts, escrow funding, marketplace publishing, deal actions, vault sealing, disputes, voting, or agent deployment unless your MCP host enforces explicit human confirmation and spending or action limits.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Error
Location
README.md:35
Finding

Inconsistent and Unpinned npm Package Execution

Content
View full analysis

Vulnerability Details

File Location: README.md:35-39
Vulnerability Type: Supply-chain package confusion and unpinned runtime dependency execution
Risk Level: High

Vulnerable Code Snippet

json
{
  "mcpServers": {
    "deal-works": {
      "command": "npx",
      "args": ["@goettelman/deal-works-mcp"],
      "env": {
        "DEAL_WORKS_API_KEY": "your_api_key_here"
      }
    }
  }
}

The package identity declared by the project differs from the package invoked above:

json
{
  "name": "@swgoettelman/deal-works-mcp",
  "version": "0.1.0"
}

The inconsistency also appears in the Cursor/VS Code example at README.md:49-56 and the usage comment at src/index.ts:6-11. In contrast, README.md:8, README.md:14, and SKILL.md:17-21 identify the package as @swgoettelman/deal-works-mcp.

Technical Analysis

The project declares and initially documents @swgoettelman/deal-works-mcp, but its MCP configuration examples invoke @goettelman/deal-works-mcp. These are distinct npm package scopes.

The examples execute the inconsistent package through npx without an exact version. If the package is not already installed locally, npx can resolve, download, and immediately execute code from the npm registry. The resulting process is explicitly given DEAL_WORKS_API_KEY through its environment.

Consequently, a user following the documented MCP configuration may execute a different package from the one represented by this repository. Even if the intended package is selected, omitting an exact version allows future package releases to replace the reviewed code at execution time.

Attack Path

  1. A user copies the Claude Desktop or Cursor/VS Code configuration from README.md.
  2. The MCP host starts npx @goettelman/deal-works-mcp without an exact version.
  3. npm resolves the differently scoped package and may download its latest release.
  4. The MCP host su ...[truncated 1133 chars]
Remediation
View remediation

Remediation Suggestions

  1. Select one verified npm identity and use it consistently across package.json, README.md, SKILL.md, source comments, MCP examples, repository metadata, and generated artifacts.
  2. Replace every @goettelman/deal-works-mcp reference with the intended verified scope if @swgoettelman/deal-works-mcp is authoritative.
  3. Pin an exact reviewed version in all execution examples, such as:
    json
    {
      "command": "npx",
      "args": ["--yes", "@swgoettelman/deal-works-mcp@0.1.0"]
    }
    
  4. Prefer installing the package into a lockfile-controlled project and invoking the local binary rather than downloading code at MCP startup.
  5. Commit and enforce a package lockfile with integrity hashes for production deployments.
  6. Verify npm package ownership, provenance attestations, signatures, and registry configuration before distribution.
  7. Use a narrowly scoped API key with minimum required permissions, transaction limits, and no unrelated account privileges.
  8. Rotate any API keys that were supplied to the inconsistent package command, and review account activity for unauthorized operations.
  9. Add an automated release check that rejects inconsistent package names and unpinned executable examples.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (41)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a large functional surface area, but the supplied code chunk contains no observable implementation at all. This is a material mismatch in primary purpose and capabilities: the code does not demonstrate any of the described infrastructure for deals, escrow, attestations, or autonomous agents.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description presents a broad business/domain-oriented platform for deals, escrow, attestations, and autonomous agents. The supplied code chunk does not implement those domain capabilities; instead, it provides generic auth infrastructure. While authentication could be a supporting component of a larger system, the declared purpose does not mention auth, OAuth2, PKCE, header parsing, or scope enforcement. Since this chunk’s actual primary function is materially different from the declared description, this is a description-behavior mismatch for the provided code chunk.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

This section exposes direct fund movement operations including transfers, escrow locks, cashouts, and agent funding with no built-in user confirmation, transaction preview, recipient verification, or spending-policy guardrails. In an autonomous-agent context, a mistaken instruction, prompt injection, or confused-deputy scenario could cause immediate financial loss.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

This tool performs a state-changing remote operation that is explicitly described as potentially irreversible when sealType is FINAL, yet the handler executes it immediately with no runtime guard, confirmation token, or secondary acknowledgement. In an agentic context, this increases the chance of accidental or prompt-induced destructive actions that can permanently finalize a vault before the user intended.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The README instructs users to execute the MCP server via an unpinned npx package reference, which will fetch the latest published version at runtime. For a tool that can transfer funds, deploy agents, publish listings, and interact with escrow and attestations, this creates a real supply-chain risk: a compromised publisher account or malicious update could cause users to run attacker-controlled code with access to their API key and high-impact capabilities.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README exposes numerous high-impact actions—fund transfers, cashout to external wallets, escrow locking, agent deployment/command, marketplace publishing, dispute filing, and voting—without clear user-facing warnings, confirmation requirements, or safe-operation guidance. In the MCP/agent context, documentation shapes how integrators expose capabilities to autonomous assistants; normalizing these actions without emphasizing approval gates increases the chance of unintended or socially engineered execution with financial, operational, or governance consequences.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill advertises network access and use of an API key but does not declare an explicit tool scope such as permissions or allowed-tools. That creates unnecessary ambiguity about what the agent may access or invoke, making it harder to enforce least privilege and easier for a downstream runtime to over-grant capabilities.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill documents high-impact actions including fund transfers, escrow locking, cashout, dispute filing, and autonomous agent deployment, but provides no explicit confirmation or human-approval guidance before irreversible or financially significant operations. In an agent setting, this increases the risk of prompt-induced, mistaken, or unauthorized execution of transactions and governance actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The deal actions include state-changing and potentially irreversible operations such as SIGN, APPROVE, CANCEL, COMPLETE, and ARCHIVE, yet the code directly submits POST requests without any execution-time confirmation or explicit safety interlock. In an agent setting, this increases the risk of accidental or prompt-induced execution of legally or operationally significant actions on behalf of a user.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Publishing marketplace content is a state-changing external action that can expose data, create reputational risk, and potentially incur commercial consequences, yet the code executes publication immediately. Because this is an MCP skill designed for agent use, unreviewed autonomous publication is riskier than in a purely manual UI flow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Agent deployment and command execution can create costs, consume infrastructure, or change the behavior of autonomous systems, but the code performs these operations without any confirmation or safety checkpoint. In the context of an agent infrastructure platform, accidental deployment or scaling can have cascading operational and financial effects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Attestation creation, vault upload, and especially FINAL vault sealing may have durable integrity, evidentiary, or irreversible consequences, yet they are executed without an explicit warning or confirmation path. This is dangerous in a deals/escrow/attestation platform because users may unintentionally create binding records or permanently seal document states.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Filing disputes and casting votes are consequential workflow actions that may trigger formal resolution processes or binding outcomes, but the code sends them directly with no user-facing confirmation. In a dispute-resolution context, accidental filings or votes can create legal, financial, or reputational harm.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

Enrollment and tipping are lower-severity but still state-changing actions, and tipping may transfer value; the code performs them without confirmation or preview. In an agent-driven environment, even low-friction actions should guard against accidental purchases or payments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The academy_tip handler initiates a money-moving action directly from tool input and sends the tip amount to the backend without any in-code confirmation, acknowledgement, or friction for the user. In an agentic context, this increases the risk of unintended spending from prompt injection, tool misuse, or ambiguous user intent, especially because tipping is discretionary and not required to complete a core workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The bourse_publish handler directly performs a marketplace publication once called, with no confirmation, preview, or explicit consent gate in this code path. In an agent setting, this is dangerous because an LLM, prompt injection, or workflow mistake could cause irreversible or user-visible publication of attacker-controlled or sensitive content to a public marketplace.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The cadre_deploy handler performs a POST to create a new agent and may include fundingAmount and SLA configuration, which can change deployed infrastructure and potentially spend resources. Although the tool description mentions deploy and optional funding, this file provides no explicit warning, confirmation, or user-facing disclosure around the side effects of deployment and funding.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The cadre_command handler sends START, STOP, RESTART, SCALE_UP, and SCALE_DOWN operations directly to the backend, and STOP/RESTART/SCALE actions can affect service availability or system state. In this code, there is no confirmation prompt, visible logging, or comment/docstring warning users that these are operationally impactful commands.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The deal_action tool exposes irreversible or high-impact operations such as REJECT, CANCEL, COMPLETE, and ARCHIVE, and the handler posts those actions directly to the backend. This file does not include a confirmation prompt, user-facing warning, or explicit disclosure that these actions modify deal state and may be irreversible.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The handler sends attestation data to a remote service via POST, including optional evidence and comments that may contain sensitive or consequential deal information. While the tool description explains the purpose, there is no visible confirmation prompt, user-facing log, or explicit warning in this code before transmitting the data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This code performs a POST to upload document hashes and names to the Oath vault service. Although the schema says 'hashes only,' the execution path lacks a confirmation prompt, log, or explicit disclosure that document-related data is being sent off-process to a backend.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

This code posts dispute data, including free-text descriptions and optional evidence metadata/URLs, over a network call. The file contains no confirmation prompt, user-facing log, or comment warning that user-supplied case details will be transmitted to the Parler service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
80% confidence
Finding

Submitting a vote is an externally visible action that may affect dispute outcomes, especially for arbitrators, yet the handler issues the POST directly with no confirmation prompt, log message, or warning beyond the brief schema description. For safety-sensitive governance actions, users should be explicitly informed before the action is sent.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The usage example invokes the package via npx without pinning a specific version, which allows whatever version is latest at execution time to be fetched and run. For an MCP server that exposes many tools and may run with access to API keys and deal-related workflows, this increases supply-chain risk because a compromised or newly published package version could execute arbitrary code in the user's environment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The escrow-deal prompt directs the assistant to create a deal, fund escrow for the full amount, and generate attestations without any user-facing warning that funds will be locked. In a deals and escrow platform, locking money is a sensitive financial action, so omitting a confirmation step can lead to accidental fund commitment, social engineering-assisted misuse, or disputes caused by misunderstood workflow effects.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.