{
  "markdown": "# trendyol-seller-mcp\n\nAn **unofficial** [MCP](https://modelcontextprotocol.io) server for the\n[Trendyol Marketplace seller API](https://developers.trendyol.com/), so Turkish\ne-commerce sellers can drive day-to-day store operations from an AI assistant\n(Claude Desktop, Claude Code, or any other MCP client): list products, check\norder packages, review returns, and — when explicitly enabled — answer customer\nquestions and update stock/prices.\n\n> **Not affiliated with Trendyol.** This is an independent open-source project\n> by [Koray Nar](https://github.com/koraynar) (Istanbul). It talks to the\n> official seller API using **your own** API credentials, which you can find in\n> the Trendyol Seller Panel: **Satıcı Paneli > Hesap Bilgilerim > Entegrasyon\n> Bilgileri** (visible only to the panel's master user).\n\nBuilt by Koray to support his own AI-automation practice and published as part\nof his public portfolio. It is a working tool with a mocked test suite — no\nuser counts, clients, or production claims implied.\n\n## Türkçe Özet\n\n`trendyol-seller-mcp`, Trendyol Pazaryeri satıcı API'si için **resmi olmayan**\nbir MCP sunucusudur. Claude gibi bir yapay zeka asistanının mağazanızla\nkonuşmasını sağlar: ürünleri listeler, sipariş paketlerini ve iadeleri\ngörüntüler, müşteri sorularını okur. Yazma işlemleri (soru cevaplama,\nstok/fiyat güncelleme) **varsayılan olarak kapalıdır**; yalnızca\n`TRENDYOL_ALLOW_WRITES=true` ortam değişkenini ayarlarsanız çalışır.\n\nGerekli bilgiler: Satıcı ID, API Key ve API Secret — bunları **Satıcı Paneli >\nHesap Bilgilerim > Entegrasyon Bilgileri** sayfasında bulabilirsiniz. Proje\nTrendyol ile bağlantılı değildir; kendi API bilgilerinizle, kendi\nsorumluluğunuzda kullanılır. Sipariş verilerinde müşteri adı ve adresi\nvarsayılan olarak gizlenir (yalnızca şehir gösterilir).\n\n## Tools\n\n| Tool | Type | What it does |\n|---|---|---|\n| `get_products(page=0, size=50, approved=None, barcode=\"\")` | read | Paged product list, trimmed to `barcode`, `title`, `quantity`, `salePrice`, `listPrice`, `approved`. |\n| `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`. |\n| `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`. |\n| `answer_question(question_id, text)` | **write** | Publishes an answer (10–2000 chars, per Trendyol's rules). Guarded — see below. |\n| `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. |\n| `get_claims(page=0, size=20)` | read | Returns/claims summary with per-item status and customer reason. Customer names excluded. |\n\n## Write guard (read this first)\n\nThe two write tools are **double-guarded**:\n\n1. They refuse with a clear message unless the environment variable\n   `TRENDYOL_ALLOW_WRITES=true` is set for the server process. Without it, the\n   server is strictly read-only — an AI assistant cannot change your store.\n2. Client-side validation runs before any request leaves your machine (answer\n   length 10–2000 characters, max 1000 items per stock/price batch, barcode\n   required per item).\n\nRecommended: run read-only first, and only set `TRENDYOL_ALLOW_WRITES=true`\nonce you trust the workflow. Answers to customer questions are public and can\nonly be posted once per question.\n\n## Configuration\n\n| Env var | Required | Meaning |\n|---|---|---|\n| `TRENDYOL_SELLER_ID` | yes | Your seller (cari) ID. |\n| `TRENDYOL_API_KEY` | yes | API key from Entegrasyon Bilgileri. |\n| `TRENDYOL_API_SECRET` | yes | API secret from Entegrasyon Bilgileri. |\n| `TRENDYOL_BASE_URL` | no | Defaults to `https://apigw.trendyol.com/integration`. Set to `https://stageapigw.trendyol.com/integration` for Trendyol's stage environment. |\n| `TRENDYOL_ALLOW_WRITES` | no | Set to `true` to enable the two write tools. Anything else keeps them disabled. |\n\nRequests use HTTP Basic auth (key/secret) and the User-Agent Trendyol requires\nfor self-integrations: `\"<sellerId> - SelfIntegration\"`.\n\n## Quickstart\n\nRequires Python 3.11+ and [uv](https://docs.astral.sh/uv/).\n\n```bash\ngit clone https://github.com/koraynar/trendyol-seller-mcp\ncd trendyol-seller-mcp\nuv venv && uv pip install -e '.[dev]'\nuv run --extra dev pytest   # all tests are offline (httpx.MockTransport), no live calls\n```\n\n### Claude Code\n\n```bash\nclaude mcp add trendyol-seller \\\n  --env TRENDYOL_SELLER_ID=123456 \\\n  --env TRENDYOL_API_KEY=your-key \\\n  --env TRENDYOL_API_SECRET=your-secret \\\n  -- uv run --directory /absolute/path/to/trendyol-seller-mcp trendyol-seller-mcp\n```\n\n### Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"trendyol-seller\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"run\",\n        \"--directory\",\n        \"/absolute/path/to/trendyol-seller-mcp\",\n        \"trendyol-seller-mcp\"\n      ],\n      \"env\": {\n        \"TRENDYOL_SELLER_ID\": \"123456\",\n        \"TRENDYOL_API_KEY\": \"your-key\",\n        \"TRENDYOL_API_SECRET\": \"your-secret\"\n      }\n    }\n  }\n}\n```\n\nAdd `\"TRENDYOL_ALLOW_WRITES\": \"true\"` to `env` only when you want the write\ntools active.\n\n## Privacy notes\n\n- `get_orders` redacts customer name and full shipping address by default and\n  returns only the city; pass `include_pii=true` per call when you actually\n  need it.\n- `get_customer_questions` and `get_claims` never return customer names.\n- Credentials come from environment variables only; nothing is written to disk.\n\n## Limitations (honest list)\n\n- **Unofficial**: Trendyol can change the API at any time; endpoints were\n  verified against `developers.trendyol.com` (v2.0 docs, EN) on 2026-08-25.\n- Covers six common operations, not the full API surface (no product creation,\n  shipping label, invoice, or webhook endpoints).\n- `update_price_and_stock` returns Trendyol's `batchRequestId` but does not\n  poll the batch result endpoint; check the batch status yourself if needed.\n- Trendyol's docs cap question pages at 50 items and order pages at 200; this\n  server clamps to those. No documented cap was found for the product filter\n  (V1) page size, so it is passed through as-is.\n- Trendyol's international (non-TR) marketplace API is not targeted or tested.\n- No caching, no retry loop — a 429 is surfaced with the `Retry-After` value\n  so the calling assistant can decide when to retry.\n- Built and tested against mocked responses; field names include tolerant\n  fallbacks where Trendyol's docs show more than one name for the same field.\n\n## License\n\nMIT © 2026 Koray Nar\n",
  "bytes": 7069,
  "sha": "5e018b4d30d1e72512fc6a3ef58ba9878ae2e94266c7e064dfd84d4f03ab9431",
  "repo_slug": "koraynar/trendyol-seller-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_koraynar_trendyol_seller_mcp_1e105b54/readme"
}