# trendyol-seller-mcp [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/koraynar/trendyol-seller-mcp  
**GitHub Stars:** 0  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/trendyol-seller-mcp

## Description
Unofficial Trendyol seller API for AI assistants: products, orders, Q&A, guarded stock/price writes.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "trendyol-seller-mcp": {
    "command": "npx",
    "args": ["-y","trendyol-seller-mcp"]
  }
}
```

## Documentation & README

# trendyol-seller-mcp

An **unofficial** [MCP](https://modelcontextprotocol.io) server for the
[Trendyol Marketplace seller API](https://developers.trendyol.com/), so Turkish
e-commerce sellers can drive day-to-day store operations from an AI assistant
(Claude Desktop, Claude Code, or any other MCP client): list products, check
order packages, review returns, and — when explicitly enabled — answer customer
questions and update stock/prices.

> **Not affiliated with Trendyol.** This is an independent open-source project
> by [Koray Nar](https://github.com/koraynar) (Istanbul). It talks to the
> official seller API using **your own** API credentials, which you can find in
> the Trendyol Seller Panel: **Satıcı Paneli > Hesap Bilgilerim > Entegrasyon
> Bilgileri** (visible only to the panel's master user).

Built by Koray to support his own AI-automation practice and published as part
of his public portfolio. It is a working tool with a mocked test suite — no
user counts, clients, or production claims implied.

## Türkçe Özet

`trendyol-seller-mcp`, Trendyol Pazaryeri satıcı API'si için **resmi olmayan**
bir MCP sunucusudur. Claude gibi bir yapay zeka asistanının mağazanızla
konuşmasını sağlar: ürünleri listeler, sipariş paketlerini ve iadeleri
görüntüler, müşteri sorularını okur. Yazma işlemleri (soru cevaplama,
stok/fiyat güncelleme) **varsayılan olarak kapalıdır**; yalnızca
`TRENDYOL_ALLOW_WRITES=true` ortam değişkenini ayarlarsanız çalışır.

Gerekli bilgiler: Satıcı ID, API Key ve API Secret — bunları **Satıcı Paneli >
Hesap Bilgilerim > Entegrasyon Bilgileri** sayfasında bulabilirsiniz. Proje
Trendyol ile bağlantılı değildir; kendi API bilgilerinizle, kendi
sorumluluğunuzda kullanılır. Sipariş verilerinde müşteri adı ve adresi
varsayılan olarak gizlenir (yalnızca şehir gösterilir).

## Tools

| Tool | Type | What it does |
|---|---|---|
| `get_products(page=0, size=50, approved=None, barcode="")` | read | Paged product list, trimmed to `barcode`, `title`, `quantity`, `salePrice`, `listPrice`, `approved`. |
| `get_orders(status="", start_date="", end_date="", page=0, size=50, include_pii=False)` | read | Order packages: `orderNumber`, `status`, `orderDate`, `totalPrice`, lines, and **customer city only**. Name/full address are redacted unless `include_pii=True`. Dates accept `YYYY-MM-DD` or epoch ms. Status values: `Created`, `Picking`, `Invoiced`, `Shipped`, `Cancelled`, `Delivered`, `UnDelivered`, `Returned`, `AtCollectionPoint`, `UnSupplied`. |
| `get_customer_questions(status="WAITING_FOR_ANSWER", page=0, size=50)` | read | Customer Q&A: id, question text, status, product, existing answer. Other statuses: `WAITING_FOR_APPROVE`, `ANSWERED`, `REPORTED`, `REJECTED`. |
| `answer_question(question_id, text)` | **write** | Publishes an answer (10–2000 chars, per Trendyol's rules). Guarded — see below. |
| `update_price_and_stock(items_json)` | **write** | Batch stock/price update. `items_json` is a JSON array of `{"barcode", "quantity", "salePrice", "listPrice"}` (max 1000 items). Returns Trendyol's `batchRequestId`. Guarded — see below. |
| `get_claims(page=0, size=20)` | read | Returns/claims summary with per-item status and customer reason. Customer names excluded. |

## Write guard (read this first)

The two write tools are **double-guarded**:

1. They refuse with a clear message unless the environment variable
   `TRENDYOL_ALLOW_WRITES=true` is set for the server process. Without it, the
   server is strictly read-only — an AI assistant cannot change your store.
2. Client-side validation runs before any request leaves your machine (answer
   length 10–2000 characters, max 1000 items per stock/price batch, barcode
   required per item).

Recommended: run read-only first, and only set `TRENDYOL_ALLOW_WRITES=true`
once you trust the workflow. Answers to customer questions are public and can
only be posted once per question.

## Configuration

| Env var | Required | Meaning |
|---|---|---|
| `TRENDYOL_SELLER_ID` | yes | Your seller (cari) ID. |
| `TRENDYOL_API_KEY` | yes | API key from Entegrasyon Bilgileri. |
| `TRENDYOL_API_SECRET` | yes | API secret from Entegrasyon Bilgileri. |
| `TRENDYOL_BASE_URL` | no | Defaults to `https://apigw.trendyol.com/integration`. Set to `https://stageapigw.trendyol.com/integration` for Trendyol's stage environment. |
| `TRENDYOL_ALLOW_WRITES` | no | Set to `true` to enable the two write tools. Anything else keeps them disabled. |

Requests use HTTP Basic auth (key/secret) and the User-Agent Trendyol requires
for self-integrations: `"<sellerId> - SelfIntegration"`.

## Quickstart

Requires Python 3.11+ and [uv](https://docs.astral.sh/uv/).

```bash
git clone https://github.com/koraynar/trendyol-seller-mcp
cd trendyol-seller-mcp
uv venv && uv pip install -e '.[dev]'
uv run --extra dev pytest   # all tests are offline (httpx.MockTransport), no live calls
```

### Claude Code

```bash
claude mcp add trendyol-seller \
  --env TRENDYOL_SELLER_ID=123456 \
  --env TRENDYOL_API_KEY=your-key \
  --env TRENDYOL_API_SECRET=your-secret \
  -- uv run --directory /absolute/path/to/trendyol-seller-mcp trendyol-seller-mcp
```

### Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "trendyol-seller": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/trendyol-seller-mcp",
        "trendyol-seller-mcp"
      ],
      "env": {
        "TRENDYOL_SELLER_ID": "123456",
        "TRENDYOL_API_KEY": "your-key",
        "TRENDYOL_API_SECRET": "your-secret"
      }
    }
  }
}
```

Add `"TRENDYOL_ALLOW_WRITES": "true"` to `env` only when you want the write
tools active.

## Privacy notes

- `get_orders` redacts customer name and full shipping address by default and
  returns only the city; pass `include_pii=true` per call when you actually
  need it.
- `get_customer_questions` and `get_claims` never return customer names.
- Credentials come from environment variables only; nothing is written to disk.

## Limitations (honest list)

- **Unofficial**: Trendyol can change the API at any time; endpoints were
  verified against `developers.trendyol.com` (v2.0 docs, EN) on 2026-08-25.
- Covers six common operations, not the full API surface (no product creation,
  shipping label, invoice, or webhook endpoints).
- `update_price_and_stock` returns Trendyol's `batchRequestId` but does not
  poll the batch result endpoint; check the batch status yourself if needed.
- Trendyol's docs cap question pages at 50 items and order pages at 200; this
  server clamps to those. No documented cap was found for the product filter
  (V1) page size, so it is passed through as-is.
- Trendyol's international (non-TR) marketplace API is not targeted or tested.
- No caching, no retry loop — a 429 is surfaced with the `Retry-After` value
  so the calling assistant can decide when to retry.
- Built and tested against mocked responses; field names include tolerant
  fallbacks where Trendyol's docs show more than one name for the same field.

## License

MIT © 2026 Koray Nar

