Skip to main content
Glama
ihavealotofguap

oskelly-mcp

oskelly-mcp

CI License: MIT

MCP server for the public catalog of oskelly.ru. 14 tools, anonymous read-only operations only, all verified against the live site.

Unofficial project, not affiliated with Oskelly. Reads exactly what any visitor without registration sees. Trademarks belong to their respective owners.

License

MIT

Related MCP server: VkusVill MCP Server

Installation

Node.js 22+.

git clone https://github.com/ihavealotofguap/oskelly-mcp.git
cd oskelly-mcp
npm ci
npm run build
npm run verify
  • Claude Desktop — claude_desktop_config.json (Settings → Developer → Edit Config), the path must be absolute:

    { "mcpServers": { "oskelly": { "command": "node", "args": ["/abs/path/oskelly-mcp/dist/index.js"] } } }
    • spawn node ENOENT on Windows → replace "node" with the output of where node, escape the slashes.

    • After editing, fully restart the app, including the tray icon.

  • Claude Code — claude mcp add oskelly -- node /abs/path/oskelly-mcp/dist/index.js

  • Debugging — npm run inspector

Tools

Tool

What it does

oskelly_describe_filters

Cheat sheet for the filter model: codes, formats, how to resolve a name into an id

oskelly_search_products

Search: query, facets, price, boolean tags, pagination, sorting

oskelly_search_facets

Same query, but returns counts and available facets instead of products

oskelly_filter_values

Values of a single facet with ids (brand, category, size, condition, …)

oskelly_search_suggestions

Query autocomplete

oskelly_category_tree

Category tree, trimmed by rootId / depth

oskelly_list_brands

Brands with ids, substring search, pagination

oskelly_list_conditions

Product conditions with descriptions

oskelly_list_attributes

Attribute dictionary (material, color, …)

oskelly_get_product

Product card by id or URL: description, attributes, sizes, photos, seller

oskelly_seller_products

Seller's products

oskelly_seller_filters

What actually exists in the seller's assortment

oskelly_home_banners

Homepage banners (FEMALE/MALE/KIDS/LIFESTYLE)

oskelly_banner_catalog

Expands a banner collection into a filter preset + products

Flow: describe_filterslist_brands/category_tree/filter_valuessearch_productsget_product.

Scope

There is and can be no login, cookies, cart, favorites, messages, or orders. This is a property of the code:

  • credentials: "omit", no Authorization/Cookie headers.

  • POST is allowed only for three read-only search endpoints — the allow-list assertReadOnlyPost in src/client.ts.

  • All tools: readOnlyHint: true, destructiveHint: false.

  • A smoke test verifies that the tools list contains no names with login/cart/favourite/order/checkout/message/account.

Notes

  • The product card is parsed from __NUXT_DATA__. There is no public JSON endpoint for a single product (GET /api/v2/products/{id} → 404), the page is rendered by Nuxt 3 on the server. The payload is decoded with the official devalue package — the same library Nuxt uses to serialize it; custom types are wired in through the standard revivers (src/nuxt.ts). Not Playwright: ~150 MB of Chromium and 3–5 s versus a single GET in ~150 ms.

  • The slug in the URL is ignored — only the numeric id at the end matters, the tool accepts both.

  • Filter format in the /products/search* body: multi-select is an array of ids ({"brand": [675]}), boolean is a bare boolean ({"sale": true}), price is an object ({"price": {"lower": 50000}}). {"brand": "675"} and {"sale": [true]} are silently ignored, {"price": [a, b]} yields success: false.

  • Price is filtered by the size-SKU, not by the card price — a product can appear in results with a card price below the boundary, so every response carries sizePriceRange: {min, max}.

  • Upstream counters are renamed: totalAmounttotalMatches, itemsCountitemsOnPage.

  • Segments (baseCategory) are tree node ids: Women=2, Men=105, Kids=188, Lifestyle=366.

  • WAF: Cyrillic in the query must be percent-encoded, otherwise 403.

  • Context: raw responses are huge (the tree is ~1 MB, brands ~750 KB), so a compact projection is returned by default; verbose: true returns the untouched response.

Testing

npm run verify        # офлайн: сервер стартует, 14 tools, все read-only
node smoke-test.mjs   # живой end-to-end по MCP против oskelly.ru

The smoke test launches the compiled server as a separate process over stdio and exercises every tool against the live site — no mocks. Parameters are chained from previous responses (brand → search → productId → sellerId → banner), and each call passes a meaningful check: PRICE_DESC really yields descending prices, conditionIds: [1] really yields only condition 1, filters narrow the results monotonically. The latest run is SMOKE-TEST-OUTPUT.txt (23 calls, 14/14 tools, 0 failures).

CI builds the project on Node 22/24/26 and runs npm run verify. The live smoke test is moved to a manual run (Actions → CI → Run workflow → run_smoke_test) so as not to hammer a third-party site from runners.

Structure

src/client.ts             HTTP-клиент, конверт, allow-list на POST
src/nuxt.ts               извлечение и декодирование SSR-payload (devalue)
src/search.ts             схема и сборка тела запроса для /products/search*
src/format.ts             компактные проекции ответов
src/tools.ts              определения 14 инструментов
src/index.ts              точка входа, stdio-транспорт
scripts/verify-server.mjs офлайн-проверка поверхности tools (CI)
smoke-test.mjs            живой end-to-end тест по протоколу MCP

Contributing

PRs are welcome. Before submitting — npm run build, npm run verify, node smoke-test.mjs.

The most fragile spots if oskelly updates: the __NUXT_DATA__ format (it will fail with an explicit error pointing to adding a reviver in src/nuxt.ts), facet codes, segment ids. Rate-limiting has not been tested; 45 s timeout, no retries — deliberately.

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    C
    quality
    B
    maintenance
    MCP server for MoySklad (МойСклад) warehouse and CRM management API. 21 tools covering the full order lifecycle: products, stock, counterparties, customer orders, shipments, supplies, warehouses, organizations, reports, and webhooks.
    60
    121
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A UCP-compliant MCP storefront server that exposes product catalog operations (search, cart, checkout) as MCP tools, following UCP schema version 2026-04-08.
    5
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server that turns Wildberries marketplace into a toolkit for LLM agents, enabling product search, detailed card inspection, price history, reviews, and cross-product comparison.

View all related MCP servers

Related MCP Connectors

  • Read-only MCP server for Muovi, Argentina's trust-first local services marketplace (6 tools).

  • Federated commerce search across independent WooCommerce merchants. Keyless, read-only MCP server.

  • Pocket Agent (aipocketagent.com) MCP server — read tools for personas, apps, and product info.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ihavealotofguap/oskelly-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server