Odel
trendyol seller mcp

trendyol seller mcp

Local
@koraynarPythonMITUpdated 1w ago

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

trendyol-seller-mcp

An unofficial MCP server for the Trendyol Marketplace seller API, 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 (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

ToolTypeWhat it does
get_products(page=0, size=50, approved=None, barcode="")readPaged product list, trimmed to barcode, title, quantity, salePrice, listPrice, approved.
get_orders(status="", start_date="", end_date="", page=0, size=50, include_pii=False)readOrder 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)readCustomer Q&A: id, question text, status, product, existing answer. Other statuses: WAITING_FOR_APPROVE, ANSWERED, REPORTED, REJECTED.
answer_question(question_id, text)writePublishes an answer (10–2000 chars, per Trendyol's rules). Guarded — see below.
update_price_and_stock(items_json)writeBatch 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)readReturns/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 varRequiredMeaning
TRENDYOL_SELLER_IDyesYour seller (cari) ID.
TRENDYOL_API_KEYyesAPI key from Entegrasyon Bilgileri.
TRENDYOL_API_SECRETyesAPI secret from Entegrasyon Bilgileri.
TRENDYOL_BASE_URLnoDefaults to https://apigw.trendyol.com/integration. Set to https://stageapigw.trendyol.com/integration for Trendyol's stage environment.
TRENDYOL_ALLOW_WRITESnoSet 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.

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

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:

{
  "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