Back to skill

Security audit

Kyma API: connect my tool

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward setup guide for connecting development tools to Kyma API, with visible third-party endpoints and no hidden execution or destructive behavior.

Install this only if you intend to route the selected tool or SDK through Kyma. Treat Kyma as an external model provider that may receive prompts, code context, and application data sent by the configured tool. Prefer per-project or temporary environment variables over global settings, review the provider's data terms for sensitive work, and pin/audit npm dependencies before production use.

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

Warning
Location
SKILL.md:42
Finding

Unpinned npm Dependencies Create Supply-Chain Risk

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, line 42
Vulnerability Type: Unpinned third-party dependencies
Risk Level: Medium

Vulnerable Code

markdown
| **Vercel AI SDK** | `npm install @kyma-api/ai-sdk ai` | `import { createKyma } from "@kyma-api/ai-sdk"; const kyma = createKyma({ apiKey: "kyma-your-api-key" })`, or set `KYMA_API_KEY` and import the default `kyma` export; pick a model with `kyma("<model id>")` | none, use `usecase=coding` |

Technical Analysis

The documented installation command does not pin reviewed versions of @kyma-api/ai-sdk or ai. Consequently, npm resolves versions from mutable package registry state at installation time.

A later release could contain compromised runtime logic or npm lifecycle scripts. Such scripts may execute during installation with the privileges of the user running npm. The absence of explicit versions also reduces reproducibility and can expose users to unexpected security regressions or breaking changes.

The audit found no evidence that the currently referenced packages are malicious. This finding concerns the unsafe dependency-resolution practice and resulting exposure to future supply-chain compromise.

Attack Path

  1. An attacker compromises the publisher account, release process, or registry distribution path of either referenced package.
  2. The attacker publishes a malicious version that satisfies npm's implicit latest-version resolution.
  3. A user follows the skill instruction and runs npm install @kyma-api/ai-sdk ai.
  4. npm downloads the attacker-controlled release.
  5. Malicious lifecycle code may execute during installation, or malicious package logic may execute when the application imports or invokes the dependency.
  6. The payload runs within the installing user's account and may access resources available to that user or application.

Impact Assessment

Successful exploitation could execute arbitrary code with the privileges of the user performing th ...[truncated 434 chars]

Remediation
View remediation

Remediation Suggestions

  • Pin both dependencies to specific, reviewed versions, for example:
bash
npm install --save-exact @kyma-api/ai-sdk@&lt;reviewed-version&gt; ai@&lt;reviewed-version&gt;
  • Do not substitute arbitrary version numbers; select versions only after reviewing their provenance, release contents, and security status.
  • Generate and retain a lockfile so transitive dependency resolution is reproducible.
  • Use npm ci in automated or production installation workflows to enforce the lockfile.
  • Enable package integrity and provenance verification where supported.
  • Audit dependency trees and lifecycle scripts before upgrades.
  • Consider installing with lifecycle scripts disabled during assessment using npm install --ignore-scripts, when compatible with the packages.
  • Automate vulnerability scanning and require review before dependency updates are accepted.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (18)

MCP Config Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

Content

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

md
These speak MCP directly: no key goes in the config, sign-in happens through OAuth on first use.

- **Claude Code**: `claude mcp add --transport http kyma https://mcp.kymaapi.com/mcp`, then `/mcp` to sign in.
- **Cursor**: one-click at `https://mcp.kymaapi.com/mcp`, or add to `.cursor/mcp.json`: `{ "mcpServers": { "kyma": { "url": "https://mcp.kymaapi.com/mcp" } } }`.
- **Codex CLI**: in `~/.codex/config.toml`: `[mcp_servers.kyma]` then `url = "https://mcp.kymaapi.com/mcp"`; then run `codex mcp login kyma`.
- **Cline**: MCP Servers → Configure MCP Servers: `{ "mcpServers": { "kyma": { "url": "https://mcp.kymaapi.com/mcp", "type": "streamableHttp" } } }`, or `cline mcp add kyma https://mcp.kymaapi.com/mcp --transport streamableHttp --yes`.

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

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

md
- **Claude Code**: `claude mcp add --transport http kyma https://mcp.kymaapi.com/mcp`, then `/mcp` to sign in.
- **Cursor**: one-click at `https://mcp.kymaapi.com/mcp`, or add to `.cursor/mcp.json`: `{ "mcpServers": { "kyma": { "url": "https://mcp.kymaapi.com/mcp" } } }`.
- **Codex CLI**: in `~/.codex/config.toml`: `[mcp_servers.kyma]` then `url = "https://mcp.kymaapi.com/mcp"`; then run `codex mcp login kyma`.
- **Cline**: MCP Servers → Configure MCP Servers: `{ "mcpServers": { "kyma": { "url": "https://mcp.kymaapi.com/mcp", "type": "streamableHttp" } } }`, or `cline mcp add kyma https://mcp.kymaapi.com/mcp --transport streamableHttp --yes`.

MCP gives read tools (catalog, pricing, uptime, spend) plus one chat tool guarded by a spend cap

External Transmission

Medium
Category
Data Exfiltration
Confidence
81% confidence
Finding

The skill directs users to point tools at a third-party API endpoint and supply an API key, which will cause prompts, code context, and other model inputs to be transmitted off-host to api.kymaapi.com. In a coding-agent context, that can include proprietary source code, secrets present in prompts, and sensitive workspace data, so the external transmission is real and security-relevant.

Content

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

md
1. Identify the tool from the table below. If it is not listed, it almost certainly still works:
   see the [any-OpenAI-client guide](https://docs.kymaapi.com/guides/any-openai-client): base URL
   `https://api.kymaapi.com/v1`, key `kyma-your-api-key`.
2. Write the exact field names and values from that row into the file, env var or settings screen
   the tool reads. Do not rename a field or guess a flag that is not shown here.
3. Recommend a model: if the tool has an agent profile in the table, call

External Transmission

Medium
Category
Data Exfiltration
Confidence
82% confidence
Finding

This instructs the agent/user to call an external recommendation endpoint, causing metadata about the user's tool or use case to be sent to a third party. While lower risk than sending full prompts, it is still outbound network communication driven by the skill and may disclose workflow/tooling information.

Content

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

md
2. Write the exact field names and values from that row into the file, env var or settings screen
   the tool reads. Do not rename a field or guess a flag that is not shown here.
3. Recommend a model: if the tool has an agent profile in the table, call
   `https://api.kymaapi.com/v1/models/recommend?agent=<agent>`. If it does not, call
   `https://api.kymaapi.com/v1/models/recommend?usecase=coding` (swap `coding` for another value
   from the response's `available_usecases` if the user's job is not coding). Never pass an
   `agent` value that is not in the table; the endpoint will just fall through to a generic answer.

External Transmission

Medium
Category
Data Exfiltration
Confidence
82% confidence
Finding

The skill further normalizes fetching external recommendations and inserting returned model IDs into config, reinforcing a workflow that depends on third-party network calls. In enterprise environments, even use-case metadata and tool selection can be sensitive operational information.

Content

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

md
the tool reads. Do not rename a field or guess a flag that is not shown here.
3. Recommend a model: if the tool has an agent profile in the table, call
   `https://api.kymaapi.com/v1/models/recommend?agent=<agent>`. If it does not, call
   `https://api.kymaapi.com/v1/models/recommend?usecase=coding` (swap `coding` for another value
   from the response's `available_usecases` if the user's job is not coding). Never pass an
   `agent` value that is not in the table; the endpoint will just fall through to a generic answer.
4. Paste the returned `recommended.model` id (or one of its `alternatives`) into the config.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This configuration explicitly places a third-party API base URL and API key into Cursor/Cline/Roo Code/Aider setups, enabling those tools to transmit user prompts and code context externally. Because these are coding assistants, the surrounding context increases sensitivity: repository contents and potentially secrets may be sent upstream during normal use.

Content

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

md
| Tool | Where | Fields | Agent profile |
|---|---|---|---|
| **Cursor** | Settings (`Cmd/Ctrl+,`) → search "OpenAI" | API Key `kyma-your-api-key`, API Base URL `https://api.kymaapi.com/v1`, add a custom model id | `cursor` |
| **Cline** | Settings gear → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>`. CLI: `cline auth -p openai -k kyma-your-api-key -m <model> -b https://api.kymaapi.com/v1` | `cline` |
| **Roo Code** | Settings → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>` | `roo-code` |
| **Aider** | Shell env, then run | `export OPENAI_API_KEY="kyma-your-api-key"` and `export OPENAI_API_BASE="https://api.kymaapi.com/v1"`, then `aider --model openai/<model id>` | `aider` |

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This continues the same provider-configuration guidance for Continue and neighboring tools, causing routine outbound transmission of code and prompts to Kyma. The risk is not the URL string itself, but that the skill operationalizes external data flow from development tools that often have broad project access.

Content

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

md
| Tool | Where | Fields | Agent profile |
|---|---|---|---|
| **Cursor** | Settings (`Cmd/Ctrl+,`) → search "OpenAI" | API Key `kyma-your-api-key`, API Base URL `https://api.kymaapi.com/v1`, add a custom model id | `cursor` |
| **Cline** | Settings gear → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>`. CLI: `cline auth -p openai -k kyma-your-api-key -m <model> -b https://api.kymaapi.com/v1` | `cline` |
| **Roo Code** | Settings → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>` | `roo-code` |
| **Aider** | Shell env, then run | `export OPENAI_API_KEY="kyma-your-api-key"` and `export OPENAI_API_BASE="https://api.kymaapi.com/v1"`, then `aider --model openai/<model id>` | `aider` |
| **Continue** | `config.yaml` | `provider: openai`, `model: <model id>`, `apiBase: https://api.kymaapi.com/v1`, `apiKey: kyma-your-api-key`, `roles: [chat, edit, apply]` (or `[autocomplete]`) | none, use `usecase=coding` |

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

The OpenClaw configuration includes both external endpoint routing and credential placement, which enables off-environment transmission once the tool runs. Given that agent frameworks may automatically attach files, conversation history, or workspace context, this is a meaningful data-exposure risk.

Content

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

md
|---|---|---|---|
| **Cursor** | Settings (`Cmd/Ctrl+,`) → search "OpenAI" | API Key `kyma-your-api-key`, API Base URL `https://api.kymaapi.com/v1`, add a custom model id | `cursor` |
| **Cline** | Settings gear → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>`. CLI: `cline auth -p openai -k kyma-your-api-key -m <model> -b https://api.kymaapi.com/v1` | `cline` |
| **Roo Code** | Settings → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>` | `roo-code` |
| **Aider** | Shell env, then run | `export OPENAI_API_KEY="kyma-your-api-key"` and `export OPENAI_API_BASE="https://api.kymaapi.com/v1"`, then `aider --model openai/<model id>` | `aider` |
| **Continue** | `config.yaml` | `provider: openai`, `model: <model id>`, `apiBase: https://api.kymaapi.com/v1`, `apiKey: kyma-your-api-key`, `roles: [chat, edit, apply]` (or `[autocomplete]`) | none, use `usecase=coding` |
| **OpenClaw** | `~/.openclaw/openclaw.json` | Under `models.providers.kyma`: `"baseUrl": "https://api.kymaapi.com/v1"`, `"apiKey": "kyma-your-api-key"`, `"api": "openai-completions"`, a `models` array of `{id, name}`; set `agents.defaults.model.primary` to `"kyma/<model id>"` | `openclaw` |

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

Configuring LangChain (Python) with a third-party base URL and key creates real outbound transmission of application prompts and chained context to an external API. In application code, this can affect not only developers but end-user data processed through the chain.

Content

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

md
| **Cursor** | Settings (`Cmd/Ctrl+,`) → search "OpenAI" | API Key `kyma-your-api-key`, API Base URL `https://api.kymaapi.com/v1`, add a custom model id | `cursor` |
| **Cline** | Settings gear → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>`. CLI: `cline auth -p openai -k kyma-your-api-key -m <model> -b https://api.kymaapi.com/v1` | `cline` |
| **Roo Code** | Settings → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>` | `roo-code` |
| **Aider** | Shell env, then run | `export OPENAI_API_KEY="kyma-your-api-key"` and `export OPENAI_API_BASE="https://api.kymaapi.com/v1"`, then `aider --model openai/<model id>` | `aider` |
| **Continue** | `config.yaml` | `provider: openai`, `model: <model id>`, `apiBase: https://api.kymaapi.com/v1`, `apiKey: kyma-your-api-key`, `roles: [chat, edit, apply]` (or `[autocomplete]`) | none, use `usecase=coding` |
| **OpenClaw** | `~/.openclaw/openclaw.json` | Under `models.providers.kyma`: `"baseUrl": "https://api.kymaapi.com/v1"`, `"apiKey": "kyma-your-api-key"`, `"api": "openai-completions"`, a `models` array of `{id, name}`; set `agents.defaults.model.primary` to `"kyma/<model id>"` | `openclaw` |
| **LangChain (Python)** | `ChatOpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"`, `model="<model id>"` | none, use `usecase=coding` |

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

The LangChain JS example likewise routes potentially sensitive prompts, retrieval results, and application data to an external service. Because LangChain is often embedded in apps, the blast radius can include user-submitted data rather than only local developer prompts.

Content

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

md
| **Cline** | Settings gear → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>`. CLI: `cline auth -p openai -k kyma-your-api-key -m <model> -b https://api.kymaapi.com/v1` | `cline` |
| **Roo Code** | Settings → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>` | `roo-code` |
| **Aider** | Shell env, then run | `export OPENAI_API_KEY="kyma-your-api-key"` and `export OPENAI_API_BASE="https://api.kymaapi.com/v1"`, then `aider --model openai/<model id>` | `aider` |
| **Continue** | `config.yaml` | `provider: openai`, `model: <model id>`, `apiBase: https://api.kymaapi.com/v1`, `apiKey: kyma-your-api-key`, `roles: [chat, edit, apply]` (or `[autocomplete]`) | none, use `usecase=coding` |
| **OpenClaw** | `~/.openclaw/openclaw.json` | Under `models.providers.kyma`: `"baseUrl": "https://api.kymaapi.com/v1"`, `"apiKey": "kyma-your-api-key"`, `"api": "openai-completions"`, a `models` array of `{id, name}`; set `agents.defaults.model.primary` to `"kyma/<model id>"` | `openclaw` |
| **LangChain (Python)** | `ChatOpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"`, `model="<model id>"` | none, use `usecase=coding` |
| **LangChain (JS)** | `new ChatOpenAI({...})` | `configuration: { baseURL: "https://api.kymaapi.com/v1" }`, `apiKey: "kyma-your-api-key"`, `model: "<model id>"` | none, use `usecase=coding` |

External Transmission

Medium
Category
Data Exfiltration
Confidence
83% confidence
Finding

The Vercel AI SDK instructions establish an external provider and API key for application use, which can cause live user interactions and generated context to be sent to Kyma. In production web apps, this can expose customer data if developers adopt the example without understanding data-flow implications.

Content

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

md
| **Roo Code** | Settings → provider "OpenAI Compatible" | Base URL `https://api.kymaapi.com/v1`, API Key `kyma-your-api-key`, Model ID `<model id>` | `roo-code` |
| **Aider** | Shell env, then run | `export OPENAI_API_KEY="kyma-your-api-key"` and `export OPENAI_API_BASE="https://api.kymaapi.com/v1"`, then `aider --model openai/<model id>` | `aider` |
| **Continue** | `config.yaml` | `provider: openai`, `model: <model id>`, `apiBase: https://api.kymaapi.com/v1`, `apiKey: kyma-your-api-key`, `roles: [chat, edit, apply]` (or `[autocomplete]`) | none, use `usecase=coding` |
| **OpenClaw** | `~/.openclaw/openclaw.json` | Under `models.providers.kyma`: `"baseUrl": "https://api.kymaapi.com/v1"`, `"apiKey": "kyma-your-api-key"`, `"api": "openai-completions"`, a `models` array of `{id, name}`; set `agents.defaults.model.primary` to `"kyma/<model id>"` | `openclaw` |
| **LangChain (Python)** | `ChatOpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"`, `model="<model id>"` | none, use `usecase=coding` |
| **LangChain (JS)** | `new ChatOpenAI({...})` | `configuration: { baseURL: "https://api.kymaapi.com/v1" }`, `apiKey: "kyma-your-api-key"`, `model: "<model id>"` | none, use `usecase=coding` |
| **Vercel AI SDK** | `npm install @kyma-api/ai-sdk ai` | `import { createKyma } from "@kyma-api/ai-sdk"; const kyma = createKyma({ apiKey: "kyma-your-api-key" })`, or set `KYMA_API_KEY` and import the default `kyma` export; pick a model with `kyma("<model id>")` | none, use `usecase=coding` |

External Transmission

Medium
Category
Data Exfiltration
Confidence
83% confidence
Finding

The OpenAI Python SDK example points application traffic to a third-party endpoint, making external transmission an intended behavior. If copied blindly, developers may redirect sensitive application workloads to a non-default provider without risk acknowledgment.

Content

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

md
| **Aider** | Shell env, then run | `export OPENAI_API_KEY="kyma-your-api-key"` and `export OPENAI_API_BASE="https://api.kymaapi.com/v1"`, then `aider --model openai/<model id>` | `aider` |
| **Continue** | `config.yaml` | `provider: openai`, `model: <model id>`, `apiBase: https://api.kymaapi.com/v1`, `apiKey: kyma-your-api-key`, `roles: [chat, edit, apply]` (or `[autocomplete]`) | none, use `usecase=coding` |
| **OpenClaw** | `~/.openclaw/openclaw.json` | Under `models.providers.kyma`: `"baseUrl": "https://api.kymaapi.com/v1"`, `"apiKey": "kyma-your-api-key"`, `"api": "openai-completions"`, a `models` array of `{id, name}`; set `agents.defaults.model.primary` to `"kyma/<model id>"` | `openclaw` |
| **LangChain (Python)** | `ChatOpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"`, `model="<model id>"` | none, use `usecase=coding` |
| **LangChain (JS)** | `new ChatOpenAI({...})` | `configuration: { baseURL: "https://api.kymaapi.com/v1" }`, `apiKey: "kyma-your-api-key"`, `model: "<model id>"` | none, use `usecase=coding` |
| **Vercel AI SDK** | `npm install @kyma-api/ai-sdk ai` | `import { createKyma } from "@kyma-api/ai-sdk"; const kyma = createKyma({ apiKey: "kyma-your-api-key" })`, or set `KYMA_API_KEY` and import the default `kyma` export; pick a model with `kyma("<model id>")` | none, use `usecase=coding` |
| **OpenAI SDK (Python)** | `OpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"` | none, use `usecase=coding` |

External Transmission

Medium
Category
Data Exfiltration
Confidence
83% confidence
Finding

The OpenAI JS SDK example similarly reroutes requests to an external service. In server or browser-backed integrations, that can result in transmission of sensitive prompts, code, or customer content outside the organization's primary trust boundary.

Content

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

md
| **Continue** | `config.yaml` | `provider: openai`, `model: <model id>`, `apiBase: https://api.kymaapi.com/v1`, `apiKey: kyma-your-api-key`, `roles: [chat, edit, apply]` (or `[autocomplete]`) | none, use `usecase=coding` |
| **OpenClaw** | `~/.openclaw/openclaw.json` | Under `models.providers.kyma`: `"baseUrl": "https://api.kymaapi.com/v1"`, `"apiKey": "kyma-your-api-key"`, `"api": "openai-completions"`, a `models` array of `{id, name}`; set `agents.defaults.model.primary` to `"kyma/<model id>"` | `openclaw` |
| **LangChain (Python)** | `ChatOpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"`, `model="<model id>"` | none, use `usecase=coding` |
| **LangChain (JS)** | `new ChatOpenAI({...})` | `configuration: { baseURL: "https://api.kymaapi.com/v1" }`, `apiKey: "kyma-your-api-key"`, `model: "<model id>"` | none, use `usecase=coding` |
| **Vercel AI SDK** | `npm install @kyma-api/ai-sdk ai` | `import { createKyma } from "@kyma-api/ai-sdk"; const kyma = createKyma({ apiKey: "kyma-your-api-key" })`, or set `KYMA_API_KEY` and import the default `kyma` export; pick a model with `kyma("<model id>")` | none, use `usecase=coding` |
| **OpenAI SDK (Python)** | `OpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"` | none, use `usecase=coding` |
| **OpenAI SDK (JS)** | `new OpenAI({...})` | `baseURL: "https://api.kymaapi.com/v1"`, `apiKey: "kyma-your-api-key"` | none, use `usecase=coding` |

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

The generic environment-variable guidance broadens the external transmission pattern to 'most CLIs and scripts,' increasing the chance of wide adoption without context-specific review. This makes accidental disclosure of local prompts, scripts, or code to the external provider more likely.

Content

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

md
| **LangChain (Python)** | `ChatOpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"`, `model="<model id>"` | none, use `usecase=coding` |
| **LangChain (JS)** | `new ChatOpenAI({...})` | `configuration: { baseURL: "https://api.kymaapi.com/v1" }`, `apiKey: "kyma-your-api-key"`, `model: "<model id>"` | none, use `usecase=coding` |
| **Vercel AI SDK** | `npm install @kyma-api/ai-sdk ai` | `import { createKyma } from "@kyma-api/ai-sdk"; const kyma = createKyma({ apiKey: "kyma-your-api-key" })`, or set `KYMA_API_KEY` and import the default `kyma` export; pick a model with `kyma("<model id>")` | none, use `usecase=coding` |
| **OpenAI SDK (Python)** | `OpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"` | none, use `usecase=coding` |
| **OpenAI SDK (JS)** | `new OpenAI({...})` | `baseURL: "https://api.kymaapi.com/v1"`, `apiKey: "kyma-your-api-key"` | none, use `usecase=coding` |

Any tool reading plain env vars (most CLIs and scripts) takes `OPENAI_API_KEY="kyma-your-api-key"`

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

The line explicitly sets OPENAI_BASE_URL to the external provider for plain env-var clients, which can silently redirect many tools to send data to Kyma. This is especially risky because environment variables may persist across shells and affect unrelated scripts unexpectedly.

Content

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

md
| **LangChain (JS)** | `new ChatOpenAI({...})` | `configuration: { baseURL: "https://api.kymaapi.com/v1" }`, `apiKey: "kyma-your-api-key"`, `model: "<model id>"` | none, use `usecase=coding` |
| **Vercel AI SDK** | `npm install @kyma-api/ai-sdk ai` | `import { createKyma } from "@kyma-api/ai-sdk"; const kyma = createKyma({ apiKey: "kyma-your-api-key" })`, or set `KYMA_API_KEY` and import the default `kyma` export; pick a model with `kyma("<model id>")` | none, use `usecase=coding` |
| **OpenAI SDK (Python)** | `OpenAI(...)` | `base_url="https://api.kymaapi.com/v1"`, `api_key="kyma-your-api-key"` | none, use `usecase=coding` |
| **OpenAI SDK (JS)** | `new OpenAI({...})` | `baseURL: "https://api.kymaapi.com/v1"`, `apiKey: "kyma-your-api-key"` | none, use `usecase=coding` |

Any tool reading plain env vars (most CLIs and scripts) takes `OPENAI_API_KEY="kyma-your-api-key"`
and `OPENAI_BASE_URL="https://api.kymaapi.com/v1"`.

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 · SKILL.md (reported line 48)May include surrounding context.

md
| **OpenAI SDK (JS)** | `new OpenAI({...})` | `baseURL: "https://api.kymaapi.com/v1"`, `apiKey: "kyma-your-api-key"` | none, use `usecase=coding` |

Any tool reading plain env vars (most CLIs and scripts) takes `OPENAI_API_KEY="kyma-your-api-key"`
and `OPENAI_BASE_URL="https://api.kymaapi.com/v1"`.

## MCP-native tools

External Transmission

Medium
Category
Data Exfiltration
Confidence
82% confidence
Finding

The Claude Code/Anthropic-shaped configuration again directs traffic and credentials to an external API host. Because the skill emphasizes exact host formatting for successful requests, it facilitates real external transmission from an agent tool that may access code context.

Content

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

export ANTHROPIC_AUTH_TOKEN="kyma-your-api-key"

text

`https://api.kymaapi.com/v1` here makes every request 404. This is the one tool in this whole
skill whose base URL does not match the OpenAI-compatible one. Recommend a model for it with
`https://api.kymaapi.com/v1/models/recommend?agent=claude-code`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
79% confidence
Finding

The recommendation endpoint for agent=claude-code is another external metadata disclosure about the tool in use. It is less severe than full prompt transfer, but still constitutes outbound communication initiated by the skill and should be disclosed.

Content

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

md
`https://api.kymaapi.com/v1` here makes every request 404. This is the one tool in this whole
skill whose base URL does not match the OpenAI-compatible one. Recommend a model for it with
`https://api.kymaapi.com/v1/models/recommend?agent=claude-code`.

## Do not