Back to skill

Security audit

Create MCP Servers using Meta-MCP

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent, but it should be reviewed because it asks users to trust an external hosted service with requirements, environment-variable secrets, generated code, and persistent deployed tools.

Review MCPHero's trust, privacy, retention, and secret-handling practices before installing. Use least-privilege, revocable credentials; avoid production or long-lived tokens unless necessary; protect MCP client config files that contain Authorization headers; and review generated or regenerated server code before relying on deployed tools for sensitive systems.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:53
Finding

Sensitive credentials are submitted to an externally hosted MCP service without documented safeguards

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 53-56, 80-82, and 131-143
Vulnerability Type: Third-party credential exposure and excessive trust
Risk Level: High

Vulnerable Code Snippets

SKILL.md, lines 53-56:

markdown
| `wizard_submit_env_vars` | Submit values as `{uuid: value}` dict |
| `wizard_set_auth` | Generate bearer token |
| `wizard_generate_code` | Trigger code gen (async) |
| `wizard_regenerate_tool_code` | Regenerate single tool code (sync) |

SKILL.md, lines 80-82:

markdown
9. wizard_submit_env_vars   → Provide values as {uuid: value} dict (call even if empty)
10. wizard_set_auth         → Generate bearer token
11. wizard_generate_code    → Trigger code generation (async → poll)

SKILL.md, lines 131-143:

markdown
### Claude Desktop config

```json
{
  "mcpServers": {
    "my-server": {
      "url": "https://api.mcphero.app/mcp/<server-id>/mcp",
      "headers": {
        "Authorization": "Bearer <bearer_token>"
      }
    }
  }
}
text

### Technical Analysis

The documented workflow directs users to submit environment-variable values, including API credentials, to the externally hosted service at `api.mcphero.app`. It also instructs users to configure a bearer token in an MCP client. While credentials may be necessary for the intended integration, the Skill does not document:

- How submitted secrets are stored, encrypted, retained, or deleted.
- Whether generated tools can read all submitted environment variables.
- Whether operators of the hosted service can access the credentials.
- Whether secrets are isolated between servers or tenants.
- Any required user confirmation before transmitting production credentials.
- Least-privilege, expiration, rotation, or secret-revocation requirements.

Consequently, users may provide long-lived production credentials that grant the hosted MCP server broader access than
...[truncated 1747 chars]
Remediation
View remediation

Remediation Suggestions

  1. Add an explicit warning before wizard_submit_env_vars that secret values are transmitted to and processed by an external hosted service.
  2. Require an affirmative user approval step before submitting any non-empty environment-variable values.
  3. Document secret storage, encryption, tenant isolation, retention, access logging, and deletion policies.
  4. Recommend short-lived, revocable, service-specific credentials instead of personal or long-lived production tokens.
  5. Require least-privilege scopes that permit only the API operations exposed by the generated MCP tools.
  6. Prohibit credential reuse across development, staging, and production environments.
  7. Integrate with a managed secrets vault so raw credentials do not need to appear in prompts, logs, or generated configuration.
  8. Redact credentials from wizard responses, telemetry, error messages, and audit logs.
  9. Provide documented rotation and immediate revocation procedures.
  10. Warn users that bearer tokens stored directly in MCP client configuration files must be protected with restrictive filesystem permissions.

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:165
Finding

Externally generated mutable tool code can become active without a mandatory review gate

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 57-59, 83-84, and 165-166
Vulnerability Type: Remote payload generation and activation
Risk Level: High

Vulnerable Code Snippets

SKILL.md, lines 57-59:

markdown
| `wizard_generate_code` | Trigger code gen (async) |
| `wizard_regenerate_tool_code` | Regenerate single tool code (sync) |
| `wizard_deploy` | Deploy and get server URL |

SKILL.md, lines 83-84:

markdown
11. wizard_generate_code    → Trigger code generation (async → poll)
12. wizard_deploy           → Deploy → returns server_url + bearer_token

SKILL.md, lines 165-166:

markdown
**Regenerate without redeploy**: After using `wizard_regenerate_tool_code`, the code change takes effect immediately for already-deployed servers (the server auto-remounts).

Technical Analysis

The Skill instructs the agent to request code generation from an external service and deploy the result. More critically, it states that code regenerated through wizard_regenerate_tool_code takes effect immediately on an already deployed server because the server automatically remounts.

This creates a mutable remote execution boundary: the effective implementation of a trusted MCP tool can change after its original deployment and review. The workflow does not require:

  • Human review of generated or regenerated source code.
  • Explicit approval before activating regenerated code.
  • Cryptographic signing or integrity verification.
  • Immutable artifact versions.
  • Comparison of the previous and replacement implementations.
  • Staged deployment, rollback, or policy enforcement.
  • Reauthorization when changed code gains access to existing credentials.

Existing MCP clients may continue calling the same tool name and server URL while the underlying implementation has changed. Because the deployed implementation can access configured environment variables and upstream service ...[truncated 1929 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove automatic activation of regenerated code and require an explicit review-and-deploy operation.
  2. Display the complete generated source and a diff against the active version before approval.
  3. Require human confirmation for every code change affecting a deployed server.
  4. Build immutable, versioned artifacts and pin each deployment to a specific artifact digest.
  5. Cryptographically sign generated artifacts and verify signatures before execution.
  6. Add staged deployment, automated security testing, and rollback support.
  7. Run generated code in a sandbox with restricted filesystem, network, process, and environment-variable access.
  8. Grant each tool access only to the specific secrets and network destinations it requires.
  9. Record tamper-resistant audit logs for generation, regeneration, approval, and deployment events.
  10. Notify connected users whenever implementation code changes, even if the server URL and tool names remain unchanged.
  11. Require renewed authorization when a code change expands network access, secret access, parameters, or supported operations.
  12. Provide a mechanism for clients to pin and verify the deployed server version.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (9)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill description tells users to connect to a third-party hosted endpoint and use it to build and deploy servers, but it does not clearly warn that prompts, requirements, generated code, configuration data, and possibly secrets will be transmitted to an external service. This omission can mislead users into sharing sensitive data under the assumption the workflow is local or low-risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
92% confidence
Finding

This explicitly instructs users to connect their client to an external hosted endpoint, which means future interactions with the Meta-MCP service will leave the local environment. In the context of a tool-building wizard, that can include user requirements, generated code, metadata, and operational details, so the transmission is security-relevant and should be clearly disclosed.

Content

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

md
Connect it to Claude Desktop, Cursor, or any MCP client, and your agent can build, deploy, and register new MCP servers on the fly.

**Meta-MCP endpoint:** `https://api.mcphero.app/mcp/meta/mcp`

---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The setup instructions direct users to edit MCP client configuration files and later store bearer tokens in those configs, but they do not warn about token sensitivity, file permissions, local exposure, or secure storage practices. This creates a realistic risk of credential leakage through plaintext config files, screenshots, backups, or source control.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The configuration snippet embeds a remote URL into the user's MCP client, enabling ongoing communication with an external service whenever the MCP server is used. Without nearby warnings, users may not appreciate that they are granting a remote service persistent access to request/response flows in their client workflow.

Content

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

md
{
  "mcpServers": {
    "mcphero": {
      "url": "https://api.mcphero.app/mcp/meta/mcp"
    }
  }
}

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

This line tells users to add the external URL and notes that OAuth authentication will occur automatically, but it does not explain the security implications of authorizing a third-party service. Auto-auth can normalize consent without ensuring the user understands scopes, data exposure, or account linkage.

Content

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

md
### Cursor and other MCP clients

Add the same URL `https://api.mcphero.app/mcp/meta/mcp` to your client's MCP server config. The client handles OAuth 2.1 authentication automatically on first use.

---

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

This example instructs users to place a bearer token in client configuration headers for a remote endpoint, creating a clear secret-handling risk. Plaintext long-lived tokens in config files are commonly exposed through local compromise, logs, backups, or accidental publication, and would allow unauthorized access to the deployed MCP server.

Content

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

md
{
  "mcpServers": {
    "my-server": {
      "url": "https://api.mcphero.app/mcp/<server-id>/mcp",
      "headers": {
        "Authorization": "Bearer <bearer_token>"
      }

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · evals/evals.json (reported line 43)May include surrounding context.

json
"type": "semantic"
        },
        {
          "text": "Shows mcpServers JSON block with the meta-mcp URL https://api.mcphero.app/mcp/meta/mcp",
          "type": "contains"
        },
        {

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This eval explicitly expects guidance to place a bearer token into a Claude Desktop configuration as an Authorization header for an external endpoint. While this is likely legitimate product functionality, storing long-lived bearer credentials in local client config increases the risk of credential exposure through filesystem access, backups, screenshots, logs, or accidental sharing of config files.

Content

Scanner excerpt · evals/evals.json (reported line 55)May include surrounding context.

json
{
      "id": 3,
      "prompt": "I just deployed an MCP server with MCPHero. The deploy returned server_url \"/mcp/abc-123/mcp\" and bearer_token \"sk-xyz\". How do I connect it to Claude Desktop?",
      "expected_output": "Instructions to add the deployed server to claude_desktop_config.json with the full URL (https://api.mcphero.app/mcp/abc-123/mcp) and the bearer token as an Authorization header.",
      "files": [],
      "assertions": [
        {

Vague Triggers

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

This JSON eval content describes using 'wizard tools' and a general workflow, but it does not define specific activation phrases, scope boundaries, or exclusion conditions for when the skill should or should not be invoked. In a manifest-style file, this kind of broad invocation framing can contribute to unintended activation because the trigger context is not narrowly specified.

Content

No source excerpt is available for this finding.