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## 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
## 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
Content
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`.
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.

Agent Config Directory Access

High
Category
Agent Snooping
Content
- **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
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.

External Transmission

Medium
Category
Data Exfiltration
Content
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
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.

External Transmission

Medium
Category
Data Exfiltration
Content
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.
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.

External Transmission

Medium
Category
Data Exfiltration
Content
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.
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| 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` |
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| 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` |
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.

External Transmission

Medium
Category
Data Exfiltration
Content
|---|---|---|---|
| **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` |
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| **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` |
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| **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` |
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| **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` |
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| **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` |
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| **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` |
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| **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"`
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| **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"`.
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| **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
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
export ANTHROPIC_AUTH_TOKEN="kyma-your-api-key"
```

`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`.
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.

External Transmission

Medium
Category
Data Exfiltration
Content
`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
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.

Static analysis

No suspicious patterns detected.